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

# Copper

> Create a Copper CRM person from a replying LinkedIn contact, with email and LinkedIn profile.

> [!NOTE]
>
> **Pro plan.** Copper works through a connection and HTTP steps, which are part of Pro and Agency (and the free trial). Anything you already have keeps working on every plan. See [Plans and billing](/help/account/billing.md).

A contact who replies leaves the campaign (the **When the contact replies** box). Add **Send to another campaign** in that box and pick a follow-up campaign. There, a **Webhook / HTTP** step creates the person in Copper with their email and LinkedIn profile.

> [!NOTE]
>
> **How it connects:** Copper's developer API with three headers. See Copper's [Create a new person](https://developer.copper.com/people/create-a-new-person.html) and [authentication](https://developer.copper.com/introduction/authentication.html) docs. The request and answer below follow Copper's docs.

## Before you start

* **Copper plan:** check Copper's pricing page for API access on your plan.
* **An API key:** in Copper, open **Settings > Integrations > API Keys** and generate one. Note the email of the user who owns it.

## 1. Connect Copper

In Kerux, open **Integrations > Connections**, click **Connect** on **Custom API** (under **Developers**):

* **How it signs in:** **API key in a header**, **Header name** `X-PW-AccessToken`, paste the key.
* **Base URL:** `https://api.copper.com`

Click **Save**. The other two headers go on the step itself.

## 2. Create the person

In the follow-up campaign, add a **Webhook / HTTP** step named `copper`:

```json theme={null}
{
  "method": "POST",
  "url": "/developer_api/v1/people",
  "headers": {
    "X-PW-Application": "developer_api",
    "X-PW-UserEmail": "owner@yourcompany.com"
  },
  "bodyType": "json",
  "body": {
    "name": "{{contact.full_name}}",
    "title": "{{contact.title | optional}}",
    "emails": [{ "email": "{{email}}", "category": "work" }],
    "socials": [{ "url": "{{contact.linkedin_url}}", "category": "linkedin" }]
  }
}
```

Copper answers with the new person (trimmed):

```json theme={null}
{ "id": 27140359, "name": "Maria Lopez", "emails": [{ "email": "maria@acme.com", "category": "work" }] }
```

The id is `{{steps.copper.response.body.id}}`. Save it on the contact with an **Update contact** step if later steps update the person or create an opportunity.

## Test with one contact

In the follow-up campaign's **Builder**, click **Test** to open **Test on one contact** and check the person in Copper.

## Common errors

> [accordion] 401 Unauthorized
>
> The key, or the `X-PW-UserEmail` header, is wrong. The email must be the key owner's.

> [accordion] Same person twice
>
> Copper's create endpoint doesn't check. Search people by email first (Copper's people search endpoint) and branch.

> [accordion] 422 Unprocessable Entity
>
> A field has the wrong shape, often `emails` without a `category`. Compare with the body above.

Related: [Webhook steps](/help/integrations/webhook-steps.md), [Pipedrive](/help/integration-guides/pipedrive.md), [Google Sheets](/help/integration-guides/google-sheets.md).


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