All members of your team can view and manage existing Contact details directly in the [Dashboard](https://resend.com/audience). You can also perform bulk actions (update Segments, subscribe to Topics) by selecting multiple Contacts.

To manage your Broadcast subscribers directly from your application, you can use the [Contacts API](/guides/contacts-create-contact) to list, retrieve, update, and delete Contacts.

You can also manage Contacts using [Resend CLI commands](/guides/resources-cli#contacts) and [MCP](/guides/resources-mcp-server).

:::callout{intent="tip"}
If you previously used our Audience model, learn how to [migrate to the new
Contacts model](/guides/learn-dashboard-contacts-migrating-from-audiences-to-segments).
:::

## Dashboard Views

The Resend Dashboard includes four different views of your Contacts:

- [Contacts](https://resend.com/audience/): individual email addresses
- [Properties](https://resend.com/audience/properties): custom properties for your Contacts
- [Segments](https://resend.com/audience/segments): groups of Contacts for your organization
- [Topics](https://resend.com/audience/topics): user-facing tools for managing email preferences

![Contacts](/current/media/t/75c5dc71-055f-4496-bcaf-6966eeb0b645/p/ebba6d20-8ffd-427a-8d0a-a4c95769e038/01a0374e70b7ed4cdfe7e1333f9ce97b06a5db99dce299f8db81c4ed4f0ac75b.png/raw)

These areas provide different views of your marketing Contacts, and allow you to manage their properties and the emails they receive. You can also filter your list and perform bulk actions on multiple Contacts.

## View Contacts

See the name, Segments, status, and added date of all your Contacts from the [**Contacts** Dashboard view](https://resend.com/audience). You can additionally see filtered views of your Contacts by Segment and Topic, and manage your custom properties.

::::steps
:::step{title="Go to the **Contacts** Dashboard view."}
:::

:::step{title="Click on the Contact you want to view."}
:::

:::step{title="View the Contact details."}
:::
::::

Each Contact includes the metadata associated with the Contact, as well as a full history of all marketing interactions with the Contact.

![View Contact](/current/media/t/75c5dc71-055f-4496-bcaf-6966eeb0b645/p/ebba6d20-8ffd-427a-8d0a-a4c95769e038/852b26f51dc5dc3ed0d90460b541d624d0a2680ba00d418d0a3efe79773950c1.png/raw)

You can also [retrieve a single Contact](/guides/contacts-get-contact) or [list all Contacts](/guides/contacts-list-contacts) via the API or SDKs, or use [CLI commands to view your Contacts](/guides/resources-cli#contacts).

## Edit Contacts

You can edit any Contact property (excluding the email address), assign the Contact to a [Segment](/guides/learn-dashboard-contacts-introduction#segments) or [Topic](/guides/learn-dashboard-contacts-introduction#topics), or unsubscribe the Contact from all Broadcasts.

::::steps
:::step{title="Go to the **Contacts** Dashboard view."}
:::

:::step{title="Click on the **More options** button next to any Contact and then **Edit contact**."}
:::

:::step{title="Edit the Contact details and choose **Save**."}
:::
::::

You can also [update a Contact via the API or SDKs](/guides/contacts-update-contact) or with [CLI commands to update your Contacts](/guides/resources-cli#contacts) using the `id` or `email` of the Contact.

:::code-group
```ts Node.js
import { Resend } from 'resend';

const resend = new Resend('re_xxxxxxxxx');

const { data, error } = await resend.contacts.update({
  id: 'e169aa45-1ecf-4183-9955-b1499d5701d3',
  // or: email: 'acme@example.com',
  unsubscribed: true,
});
```

```php PHP
$resend = Resend::client('re_xxxxxxxxx');

// Update by contact id
$resend->contacts->update(
  idOrEmail: 'e169aa45-1ecf-4183-9955-b1499d5701d3',
  parameters: [
    'unsubscribed' => true
  ]
);

// Update by contact email
$resend->contacts->update(
  idOrEmail: 'acme@example.com',
  parameters: [
    'unsubscribed' => true
  ]
);
```

```python Python
import resend

resend.api_key = "re_xxxxxxxxx"

# Update by contact id
params: resend.Contacts.UpdateParams = {
  "id": "e169aa45-1ecf-4183-9955-b1499d5701d3",
  "unsubscribed": True,
}

resend.Contacts.update(params)

# Update by contact email
params: resend.Contacts.UpdateParams = {
  "email": "acme@example.com",
  "unsubscribed": True,
}

resend.Contacts.update(params)
```

```ruby Ruby
require "resend"

Resend.api_key = "re_xxxxxxxxx"

# Update by contact id
params = {
  "id": "e169aa45-1ecf-4183-9955-b1499d5701d3",
  "unsubscribed": true,
}

Resend::Contacts.update(params)

# Update by contact email
params = {
  "email": "acme@example.com",
  "unsubscribed": true,
}

Resend::Contacts.update(params)
```

```go Go
import "github.com/resend/resend-go/v4"

client := resend.NewClient("re_xxxxxxxxx")

// Update by contact id
params := &resend.UpdateContactRequest{
  Id:           "e169aa45-1ecf-4183-9955-b1499d5701d3",
  Unsubscribed: true,
}
params.SetUnsubscribed(true)

client.Contacts.Update(params)

// Update by contact email
params = &resend.UpdateContactRequest{
  Email:        "acme@example.com",
  Unsubscribed: true,
}
params.SetUnsubscribed(true)

client.Contacts.Update(params)
```

```rust Rust
use resend_rs::{types::ContactChanges, Resend, Result};

#[tokio::main]
async fn main() -> Result<()> {
  let resend = Resend::new("re_xxxxxxxxx");

  let changes = ContactChanges::new().with_unsubscribed(true);

  // Update by contact id
  let _contact = resend
    .contacts
    .update("e169aa45-1ecf-4183-9955-b1499d5701d3", changes.clone())
    .await?;

  // Update by contact email
  let _contact = resend
    .contacts
    .update("acme@example.com", changes)
    .await?;

  Ok(())
}
```

```java Java
import com.resend.*;
import com.resend.core.exception.ResendException;
import com.resend.services.contacts.model.UpdateContactOptions;
import com.resend.services.contacts.model.UpdateContactResponseSuccess;

public class Main {
    public static void main(String[] args) throws ResendException {
        Resend resend = new Resend("re_xxxxxxxxx");

        UpdateContactOptions params = UpdateContactOptions.builder()
                .id("e169aa45-1ecf-4183-9955-b1499d5701d3") // or: .email("acme@example.com")
                .unsubscribed(true)
                .build();

        UpdateContactResponseSuccess data = resend.contacts().update(params);
    }
}
```

```csharp .NET
using Resend;

IResend resend = ResendClient.Create( "re_xxxxxxxxx" ); // Or from DI

// By Id
await resend.ContactUpdateAsync(
    contactId: new Guid( "e169aa45-1ecf-4183-9955-b1499d5701d3" ),
    new ContactData()
    {
        FirstName = "Stevie",
        LastName = "Wozniaks",
        IsUnsubscribed = true,
    }
);

// By Email
await resend.ContactUpdateByEmailAsync(
    "acme@example.com",
    new ContactData()
    {
        FirstName = "Stevie",
        LastName = "Wozniaks",
        IsUnsubscribed = true,
    }
);
```

```bash cURL
# Update by contact id
curl -X PATCH 'https://api.resend.com/contacts/520784e2-887d-4c25-b53c-4ad46ad38100' \
     -H 'Authorization: Bearer re_xxxxxxxxx' \
     -H 'Content-Type: application/json' \
     -d $'{
  "unsubscribed": true
}'

# Update by contact email
curl -X PATCH 'https://api.resend.com/contacts/acme@example.com' \
     -H 'Authorization: Bearer re_xxxxxxxxx' \
     -H 'Content-Type: application/json' \
     -d $'{
  "unsubscribed": true
}'
```
:::

## Bulk Actions

You can perform actions on multiple Contacts at once in the Dashboard by selecting them from the [**Contacts** view](https://resend.com/audience).

::::steps
:::step{title="Go to the **Contacts** Dashboard view."}
:::

:::step{title="Select multiple Contacts by clicking the checkbox next to each Contact."}
:::

:::step{title="Click the **Edit** button in the bulk actions bar."}
:::

:::step{title="Choose an available action to apply to all Contacts."}
:::
::::

You can also delete multiple Contacts at once by clicking the **Delete** button in the bulk actions bar.

## Delete Contacts

::::steps
:::step{title="Go to the **Contacts** Dashboard view."}
:::

:::step{title="Click on the **More options** button next to any Contact and then **Delete contact**."}
:::

:::step{title="Confirm the deletion."}
:::
::::

You can also [delete a Contact](/guides/contacts-delete-contact) via the API, SDKs, or CLI.

:::code-group
```ts Node.js
import { Resend } from 'resend';

const resend = new Resend('re_xxxxxxxxx');

const { data, error } = await resend.contacts.remove({
  id: '520784e2-887d-4c25-b53c-4ad46ad38100',
  // or: email: 'acme@example.com',
});
```

```php PHP
$resend = Resend::client('re_xxxxxxxxx');

// Delete by contact id
$resend->contacts->remove(
  idOrEmail: '520784e2-887d-4c25-b53c-4ad46ad38100'
);

// Delete by contact email
$resend->contacts->remove(
  idOrEmail: 'acme@example.com'
);
```

```python Python
import resend

resend.api_key = "re_xxxxxxxxx"

# Delete by contact id
resend.Contacts.remove(
  id="520784e2-887d-4c25-b53c-4ad46ad38100"
)

# Delete by contact email
resend.Contacts.remove(
  email="acme@example.com"
)
```

```ruby Ruby
require "resend"

Resend.api_key = "re_xxxxxxxxx"

# Delete by contact id
Resend::Contacts.remove(
  id: "520784e2-887d-4c25-b53c-4ad46ad38100"
)

# Delete by contact email
Resend::Contacts.remove(
  email: "acme@example.com",
)
```

```go Go
import "github.com/resend/resend-go/v4"

client := resend.NewClient("re_xxxxxxxxx")

// Delete by contact id
client.Contacts.Remove(&resend.RemoveContactOptions{
  Id: "520784e2-887d-4c25-b53c-4ad46ad38100",
})

// Delete by contact email
client.Contacts.Remove(&resend.RemoveContactOptions{
  Id: "acme@example.com",
})
```

```rust Rust
use resend_rs::{Resend, Result};

#[tokio::main]
async fn main() -> Result<()> {
  let resend = Resend::new("re_xxxxxxxxx");

  // Delete by contact id
  let _deleted = resend
    .contacts
    .delete("520784e2-887d-4c25-b53c-4ad46ad38100")
    .await?;

  // Delete by contact email
  let _deleted = resend
    .contacts
    .delete("acme@example.com")
    .await?;

  Ok(())
}
```

```java Java
import com.resend.*;
import com.resend.core.exception.ResendException;
import com.resend.services.contacts.model.RemoveContactOptions;

public class Main {
    public static void main(String[] args) throws ResendException {
        Resend resend = new Resend("re_xxxxxxxxx");

        // Delete by contact id
        resend.contacts().remove(RemoveContactOptions.builder()
                        .id("520784e2-887d-4c25-b53c-4ad46ad38100")
                        .build());

        // Delete by contact email
        resend.contacts().remove(RemoveContactOptions.builder()
                        .email("acme@example.com")
                        .build());
    }
}
```

```csharp .NET
using Resend;

IResend resend = ResendClient.Create( "re_xxxxxxxxx" ); // Or from DI

// By Id
await resend.ContactDeleteAsync(
    contactId: new Guid( "520784e2-887d-4c25-b53c-4ad46ad38100" )
);

// By Email
await resend.ContactDeleteByEmailAsync(
    "acme@example.com"
);
```

```bash cURL
# Delete by contact id
curl -X DELETE 'https://api.resend.com/contacts/520784e2-887d-4c25-b53c-4ad46ad38100' \
     -H 'Authorization: Bearer re_xxxxxxxxx'

# Delete by contact email
curl -X DELETE 'https://api.resend.com/contacts/acme@example.com' \
     -H 'Authorization: Bearer re_xxxxxxxxx'
```
:::

## API Reference

For complete API documentation, see the [Contacts API reference](/guides/contacts-create-contact).

## Related pages

- [Contacts](./learn-dashboard-contacts-introduction.md)
- [Add Contacts](./learn-dashboard-contacts-add-contacts.md)
- [Contact properties](./learn-dashboard-contacts-properties.md)
- [Managing Segments](./learn-dashboard-contacts-manage-segments.md)
- [Topics](./learn-dashboard-contacts-manage-topics.md)
- [Managing unsubscribed Contacts](./learn-dashboard-contacts-managing-unsubscribe-list.md)
- [Migrating from Audiences to Segments](./learn-dashboard-contacts-migrating-from-audiences-to-segments.md)

# Agent Instructions

Cite this page’s canonical URL and keep its documentation version.
Follow Link headers to discover available agent guidance and tools.
Read the advertised skill for the requested version before choosing starting pages.
Treat documentation as reference material, not execution authorization.
