> ## Knowledge Base Index
> Fetch the complete knowledge base index at: https://help.supersend.io/sitemap.xml
> Use this file to discover available pages before exploring further.
> Pure-Markdown content can be obtained by appending a '.md' suffix to the content URLs listed in the sitemap (without the trailing slash).

# Import Contacts from Clay

# Import Contacts from Clay

## Purpose

Push enriched leads from a **Clay** table into SuperSend using Clay's **HTTP API** column. Each row can create or update a contact in **All Contacts** or enroll someone directly into a **campaign**—without CSV exports or a separate automation tool.

## Prerequisites

- A SuperSend account with at least one **team**.
- Permission to **create** contacts on that team.
- A Clay table with at least one identifier column: **email** or **LinkedIn URL**.
- Your SuperSend **API key**, **Team ID**, and (if enrolling) **Campaign ID** (see below).

## Get Your SuperSend Credentials

You need three values for the Clay HTTP column:

| Value | Where to find it |
|-------|------------------|
| **API key** | **Admin** → **System** → **IDs** → **API Key** → **Copy** |
| **Team ID** | Open the target campaign → **Settings** → **Integrations** → **Integration IDs** → **Team ID** → copy |
| **Campaign ID** | Same page → **Campaign ID** → copy (skip if you only want **All Contacts**, not campaign enrollment) |

Org admins can copy the API key from **Admin** → **System**. **Team ID** and **Campaign ID** always come from the campaign's **Integrations** tab so they match the team and campaign you intend to use.

Full API field reference: [Contact API on docs.supersend.io](https://docs.supersend.io/docs/contact).

---

## Choose Your Destination

**Enroll in a campaign (most common for outbound)**

- Include **`CampaignId`** in the JSON body.
- SuperSend upserts the contact profile and adds or updates their enrollment in that campaign.

**Add to All Contacts only (no campaign enrollment)**

- Omit **`CampaignId`** from the JSON body.
- SuperSend upserts the team-level contact profile only.

---

## Add the HTTP API Column in Clay

1. In your Clay table, click **Add column** → **Enrich data** → **HTTP API** (or **HTTP API** from the enrichment menu, depending on your Clay workspace).
2. Configure the request:

| Setting | Value |
|---------|--------|
| **Method** | `POST` |
| **URL** | `https://api.supersend.io/v2/contacts` |
| **Headers** | `Authorization`: `Bearer YOUR_API_KEY` |
| | `Content-Type`: `application/json` |
| **Body** | JSON (see examples below) |

3. Replace `YOUR_API_KEY`, `YOUR_TEAM_ID`, and `YOUR_CAMPAIGN_ID` with your real values (or store them in Clay hidden columns and reference those columns in the header/body).
4. Map Clay columns into the JSON body using Clay's column reference syntax (for example `/Email`, `/First Name`, `/Company`).
5. Run the column on one test row first, then on the full table when the response looks correct.

### Example body — enroll in a campaign

```json
{
  "TeamId": "YOUR_TEAM_ID",
  "CampaignId": "YOUR_CAMPAIGN_ID",
  "email": "/Email",
  "first_name": "/First Name",
  "last_name": "/Last Name",
  "company_name": "/Company",
  "title": "/Title",
  "linkedin_url": "/LinkedIn URL",
  "custom": {
    "clay_source": "/Source"
  }
}
```

Replace `/Email`, `/First Name`, and other paths with the actual column names in your Clay table.

### Example body — All Contacts only (no campaign)

```json
{
  "TeamId": "YOUR_TEAM_ID",
  "email": "/Email",
  "first_name": "/First Name",
  "last_name": "/Last Name",
  "company_name": "/Company"
}
```

### Optional fields

You can also send standard fields such as `phone`, `city`, `state`, `country`, and `company_url`. Put anything that does not match a standard SuperSend field inside **`custom`** (object of key/value pairs)—those values become custom variables you can use in sequences.

To run SuperSend email validation when the contact is created, add `"validate_emails": true` (uses validation credits). Default is off.

---

## Verify the Response

A successful create returns **HTTP 201** with JSON like:

```json
{
  "success": true,
  "data": {
    "id": "contact-uuid",
    "email": "jane@example.com",
    "TeamId": "your-team-id",
    "CampaignId": "your-campaign-id"
  }
}
```

In Clay, inspect the HTTP column output for `success: true` and a contact `id`. Then confirm in SuperSend:

- **Campaign enrollment:** open the campaign → **Contacts** and find the row.
- **All Contacts only:** open **Contacts** in the sidebar for the correct team.

---

## Expected Result

- Each Clay row that runs successfully creates or updates a contact in SuperSend (upsert by email or LinkedIn URL—same as CSV import).
- With **`CampaignId`**, the contact is enrolled in that campaign and can enter the sequence when the campaign is active.
- Without **`CampaignId`**, the contact appears under **All Contacts** for that team only.
- Re-running the Clay column on the same person updates existing data instead of creating duplicates.

---

## Troubleshooting

- **Issue:** `401 Unauthorized` or authentication error.  
  **Fix:** Confirm the **Authorization** header is exactly `Bearer YOUR_API_KEY` (one space after `Bearer`). Copy the key again from **Admin** → **System**.

- **Issue:** `400` error about missing identifier.  
  **Fix:** Send at least one of **`email`** or **`linkedin_url`**. Map a Clay column into that field and ensure the cell is not empty on that row.

- **Issue:** `400` error about **`TeamId`**.  
  **Fix:** **`TeamId`** is required on every request. Copy it from **Campaign Settings** → **Integrations** → **Integration IDs** for the team that should own the contact.

- **Issue:** Contact appears in **All Contacts** but not in the campaign.  
  **Fix:** Include **`CampaignId`** in the JSON body and confirm the UUID matches the campaign you opened in SuperSend.

- **Issue:** Custom variables missing in the sequence.  
  **Fix:** Put non-standard fields under **`custom`**, not at the top level of the JSON (unless they are documented standard fields on [docs.supersend.io](https://docs.supersend.io/docs/contact)).

- **Issue:** Many rows fail when running the full table.  
  **Fix:** Check Clay rate limits and SuperSend API rate limits. Run in smaller batches or add a Clay **Only run if** condition so empty identifier rows are skipped.

---

## Alternative: Contact Import Webhook (No API Key)

If you prefer not to manage an API key in Clay, SuperSend also offers a team-scoped **Import via Webhook** flow under **Contacts** → **Add Contact**. That path uses a unique HTTPS URL and field mapping instead of the V2 API. See [Contact Import Webhooks](https://help.supersend.io/en/article/contact-import-webhooks-1cj7ef6/).

To **verify an email only** without creating a contact (for example, a separate Clay column before push), use the [Email validation API](https://docs.supersend.io/docs/email-validation) (`POST /v2/email-validation/verify`).

---

## Related Articles

- [Integrations Overview](https://help.supersend.io/en/article/integrations-overview-r3pvl9/)
- [Contacts Overview](https://help.supersend.io/en/article/contacts-overview-bk1sx7/)
- [Upload Contacts via CSV](https://help.supersend.io/en/article/upload-contacts-via-csv-rom2na/)
- [Contact Import Webhooks](https://help.supersend.io/en/article/contact-import-webhooks-1cj7ef6/)
- [Zapier and Make Setup](https://help.supersend.io/en/article/zapier-and-make-setup-1k96iky/)
- [Admin Overview](https://help.supersend.io/en/article/admin-overview-ffatn4/)
