# LinkedIn campaigns

> The routes of the previous LinkedIn only campaigns. Deprecated, still working for existing integrations.

Source: https://docs.emelia.io/docs/campaigns/legacy/linkedin

> **Deprecated.** These routes manage the LinkedIn only campaigns of the previous system. They keep working, but new integrations should create [Campaigns](https://docs.emelia.io/docs/campaigns.md) with LinkedIn steps (`VISIT`, `CONNECTION`, `MESSAGE`...), see [A LinkedIn automation sequence](https://docs.emelia.io/docs/campaigns.md#a-linkedin-automation-sequence).

## What you can still do

| Need                               | Route                                                                                                                              |
| ---------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- |
| List the legacy LinkedIn campaigns | [List campaigns](https://docs.emelia.io/docs/campaigns/legacy/linkedin/list-campaigns.md)                                                                   |
| Feed a running legacy campaign     | [Add a contact](https://docs.emelia.io/docs/campaigns/legacy/linkedin/add-contact.md)                                                                       |
| Read the results                   | [Get activities](https://docs.emelia.io/docs/campaigns/legacy/linkedin/get-activities.md), [Get statistics](https://docs.emelia.io/docs/campaigns/legacy/linkedin/get-statistics.md) |

[`POST /linkedin/campaign/contacts`](https://docs.emelia.io/docs/campaigns/legacy/linkedin/add-contact.md)

**curl**

```bash
curl -X POST https://api.emelia.io/linkedin/campaign/contacts \
  -H "Authorization: $EMELIA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"id": "6650f1a2b839d80011c5a0f1", "contact": {"linkedinUrlProfile": "https://www.linkedin.com/in/claire-fontaine", "firstName": "Claire", "lastName": "Fontaine"}}'
```

**JavaScript**

```js
await fetch('https://api.emelia.io/linkedin/campaign/contacts', {
  method: 'POST',
  headers: { Authorization: process.env.EMELIA_API_KEY, 'Content-Type': 'application/json' },
  body: JSON.stringify({
    id: '6650f1a2b839d80011c5a0f1',
    contact: { linkedinUrlProfile: 'https://www.linkedin.com/in/claire-fontaine', firstName: 'Claire', lastName: 'Fontaine' },
  }),
});
```

**Python**

```python
import os
import requests

requests.post(
    "https://api.emelia.io/linkedin/campaign/contacts",
    headers={"Authorization": os.environ["EMELIA_API_KEY"]},
    json={
        "id": "6650f1a2b839d80011c5a0f1",
        "contact": {"linkedinUrlProfile": "https://www.linkedin.com/in/claire-fontaine", "firstName": "Claire", "lastName": "Fontaine"},
    },
)
```

The profile goes to a list named after the campaign. A finished campaign starts again, a running one schedules the contact at once, and a profile already in that list is refused.

## Good to know

* The listing of contacts pages from `page=0` and answers `{ success, list, count }`.
* `PATCH .../settings/global` updates the fields you send, with `dailyContact` from 1 to 80.
* `GET /stats/linkedin` answers `401` for an unknown campaign, and a flat summary unless `detailed=true`.
* The LinkedIn events of these campaigns (`VISITED`, `INVITED`, `ACCEPTED`, `MESSAGE_SENT`, `INMAIL_SENT`, `REPLIED`) are described in [Legacy LinkedIn activity](https://docs.emelia.io/docs/webhooks/legacy-linkedin-activity.md).
