> ## Documentation Index
> Fetch the complete documentation index at: https://help.the-meridian.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Contacts

A contact is a named human at one of your stores, rather than the shop's generic inbox. Contacts are what let a lifecycle email say "Hi Jane" and reach the person who actually decides whether to keep your app.

## Where they come from

| Source | Role | Set by |
| - | - | - |
| Shopify | **Owner** | The store's verified account owner |
| Shopify | **Collaborator** | Agencies and freelancers with access to the store's admin |
| Shopify | **User** | Other staff on the install |
| You | **Added manually** | A person you add on the store's [profile](/profile-1) |
| Your app | - | Pushed with the SDK when your app knows who it's talking to |

Roles that come from Shopify **can't be set by hand**, because the flag is reserved for what Shopify verified. When you add a contact yourself, only the email is required; first and last name, phone and a free-text role are optional.

## Automatic capture

The Shopify rows above come from **automatic capture**. When a staff member opens your embedded app, the SDK reads their App Bridge session token and forwards it to Meridian, which verifies it with your Shopify credentials, asks Shopify who the person is, and records them here with the role Shopify reports. Nothing runs in the merchant's way: capture never blocks a render and never throws into your app.

Two things have to be in place, whether or not you bill through Meridian and wherever your app is hosted:

1. **Something has to call capture from the browser.** [`MeridianProvider`](/sdk-provider) does it on mount. An app that uses the SDK server-side only, without the provider, calls `captureCurrentUser({ shopToken })` once per page load instead.
2. **Your Shopify client id and client secret are set in Meridian**, in **App Settings** under **Meridian SDK**. Meridian needs them to verify the session token and to exchange it. Without both, capture does nothing.

When the credentials are missing, the **Meridian SDK** section of **App Settings** and the **Contacts** card on each store's profile show a notice saying capture is inactive. If the credentials are present but belong to a different Shopify app, the notice says capture is failing and names the last refusal.

The integration steps, and a troubleshooting table for the network call, are in [Automatic contact capture](/sdk-identify#automatic-contact-capture).

## Editing one

Only contacts **added here** can be edited. Hover the contact on the store's profile and pick the pencil. You can correct the name, phone, free-text role, and the email address itself; clearing a field removes it.

Two addresses can't collide: if another contact on the same store already uses the one you typed, the form says so instead of saving.

A contact Shopify reported or your app pushed isn't editable. Its details are refreshed from that source on the merchant's next visit, so any edit would be silently overwritten.

## Removing one

Only contacts **added here** can be removed. A contact Shopify reported stays, because it reflects who has access to the store, and removing it locally would just make Meridian wrong.

## How automations use them

A [Send email](/send-email) step set to *Store contacts* resolves its recipients from this list:

* **Principal contacts**: the Shopify account owner plus the contacts you added by hand. A contact you added counts as principal, because adding one says "this is the person I talk to".
* **Everyone we know**: one email per named person, up to 20 per store.
* **Collaborators are excluded** unless you ask for them. They're usually not your customer, and merchant-facing lifecycle email reads badly to an agency.

When no named contact matches, the send **falls back to the shop inbox** rather than skipping the store.

## Personalising the email

A send addressed to contacts fills `contact_first_name`, `contact_last_name` and `contact_name` per recipient. Every other recipient mode leaves them empty, so a template degrades to a generic greeting instead of leaking a token. See [Variables](/automation-variables).

<Note>
  Contacts can't be used in [conditions](/condition-variable): a flow's conditions are evaluated before Meridian knows who the email is going to.
</Note>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.