# Create Blacklist
Source: https://docs.linkedcamp.com/api-reference/blacklists/create-blacklist
POST https://api.linkedcamp.com/blacklists
Add a blacklist entry to prevent outreach to specific profiles, job titles, or keywords.
## Headers
Your LinkedCamp API token.
## Body Parameters
The type of blacklist entry.
Available values: `PROFILE_URL`, `JOB_TITLE`, `KEYWORD`
The value to blacklist. Depending on the type, this could be a LinkedIn profile URL, a job title, or a keyword.
The LinkedIn account email to associate the blacklist with. **Required** if the user has more than one linked LinkedIn account.
## Response
Whether the request was successful.
A human-readable result message.
```bash cURL theme={null}
curl -X POST https://api.linkedcamp.com/blacklists \
-H "token: YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"type": "PROFILE_URL",
"keyword": "https://www.linkedin.com/in/johndoe"
}'
```
```python Python theme={null}
import requests
response = requests.post(
"https://api.linkedcamp.com/blacklists",
headers={"token": "YOUR_API_TOKEN"},
json={
"type": "PROFILE_URL",
"keyword": "https://www.linkedin.com/in/johndoe",
},
)
print(response.json())
```
```javascript JavaScript theme={null}
const response = await fetch("https://api.linkedcamp.com/blacklists", {
method: "POST",
headers: {
"token": "YOUR_API_TOKEN",
"Content-Type": "application/json",
},
body: JSON.stringify({
type: "PROFILE_URL",
keyword: "https://www.linkedin.com/in/johndoe",
}),
});
const data = await response.json();
console.log(data);
```
```json 200 theme={null}
{
"success": true,
"message": "Blacklist added successfully!"
}
```
```json 200 - Error theme={null}
{
"success": false,
"message": "Invalid type (Possible Values: PROFILE_URL, JOB_TITLE, KEYWORD)"
}
```
# List Blacklists
Source: https://docs.linkedcamp.com/api-reference/blacklists/list-blacklists
GET https://api.linkedcamp.com/blacklists
Returns blacklist entries for the authenticated user, optionally filtered by type.
## Headers
Your LinkedCamp API token.
## Query Parameters
Filter blacklist entries by type.
Available values: `PROFILE_URL`, `KEYWORD`, `JOB_TITLE`
## Response
Whether the request was successful.
A human-readable result message.
Array of blacklist entries.
The blacklisted value.
The blacklist type (PROFILE\_URL, JOB\_TITLE, or KEYWORD).
Creation timestamp.
```bash cURL theme={null}
curl -X GET "https://api.linkedcamp.com/blacklists?type=PROFILE_URL" \
-H "token: YOUR_API_TOKEN"
```
```python Python theme={null}
import requests
response = requests.get(
"https://api.linkedcamp.com/blacklists",
headers={"token": "YOUR_API_TOKEN"},
params={"type": "PROFILE_URL"},
)
print(response.json())
```
```javascript JavaScript theme={null}
const response = await fetch(
"https://api.linkedcamp.com/blacklists?type=PROFILE_URL",
{
headers: { "token": "YOUR_API_TOKEN" },
}
);
const data = await response.json();
console.log(data);
```
```json 200 theme={null}
{
"success": true,
"message": "Blacklist found successfully!",
"data": [
{
"keyword": "https://www.linkedin.com/in/johndoe",
"type": "PROFILE_URL",
"createdAt": 1625000000000
}
]
}
```
```json 200 - No results theme={null}
{
"success": false,
"message": "Records not found!"
}
```
# Create Campaign
Source: https://docs.linkedcamp.com/api-reference/campaigns/create-campaign
POST https://api.linkedcamp.com/campaigns
Create a new LinkedIn outreach campaign.
## Headers
Your LinkedCamp API token.
## Body Parameters
The name of the campaign.
A LinkedIn search URL to source leads from. For example, a LinkedIn People Search URL with filters applied.
The type of outreach sequence to use.
Available values: `CONNECT`, `MESSAGE`, `INMAIL`, `EMAIL`
The message content for each step of the sequence. Fields vary based on the sequence type.
Connection request note (275 characters max). Used with `CONNECT` sequence.
Short connection note (175 characters max). Used with `CONNECT` sequence.
First follow-up message.
Second follow-up message.
Third follow-up message.
## Response
Whether the request was successful.
A human-readable result message.
The ID of the newly created campaign.
```bash cURL theme={null}
curl -X POST https://api.linkedcamp.com/campaigns \
-H "token: YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"title": "Outreach Campaign",
"url": "https://www.linkedin.com/search/results/people/?network=%5B%22S%22%5D&origin=FACETED_SEARCH&sid=Z6B",
"sequence": "CONNECT",
"content": {
"longNote": "Hi {{firstName}}, I noticed we share similar interests. Would love to connect!",
"shortNote": "Hi {{firstName}}, let'\''s connect!",
"message1": "Thanks for connecting! I wanted to reach out about...",
"message2": "Just following up on my previous message...",
"message3": "Final follow-up - would love to hear your thoughts."
}
}'
```
```python Python theme={null}
import requests
response = requests.post(
"https://api.linkedcamp.com/campaigns",
headers={"token": "YOUR_API_TOKEN"},
json={
"title": "Outreach Campaign",
"url": "https://www.linkedin.com/search/results/people/?network=%5B%22S%22%5D&origin=FACETED_SEARCH&sid=Z6B",
"sequence": "CONNECT",
"content": {
"longNote": "Hi {{firstName}}, I noticed we share similar interests. Would love to connect!",
"shortNote": "Hi {{firstName}}, let's connect!",
"message1": "Thanks for connecting! I wanted to reach out about...",
"message2": "Just following up on my previous message...",
"message3": "Final follow-up - would love to hear your thoughts.",
},
},
)
print(response.json())
```
```javascript JavaScript theme={null}
const response = await fetch("https://api.linkedcamp.com/campaigns", {
method: "POST",
headers: {
"token": "YOUR_API_TOKEN",
"Content-Type": "application/json",
},
body: JSON.stringify({
title: "Outreach Campaign",
url: "https://www.linkedin.com/search/results/people/?network=%5B%22S%22%5D&origin=FACETED_SEARCH&sid=Z6B",
sequence: "CONNECT",
content: {
longNote: "Hi {{firstName}}, I noticed we share similar interests. Would love to connect!",
shortNote: "Hi {{firstName}}, let's connect!",
message1: "Thanks for connecting! I wanted to reach out about...",
message2: "Just following up on my previous message...",
message3: "Final follow-up - would love to hear your thoughts.",
},
}),
});
const data = await response.json();
console.log(data);
```
```json 200 theme={null}
{
"success": true,
"message": "Campaign created successfully!",
"campaignId": "60f7a1b2c3d4e5f6a7b8c9d0"
}
```
```json 400 theme={null}
{
"success": false,
"message": "Title is required!"
}
```
# Get Campaign
Source: https://docs.linkedcamp.com/api-reference/campaigns/get-campaign
GET https://api.linkedcamp.com/campaigns/{campaignId}
Returns detailed data for a specific campaign.
## Headers
Your LinkedCamp API token.
## Path Parameters
The ID of the campaign. You can get this from the campaign URL or from the [List Campaigns](/api-reference/campaigns/list-campaigns) endpoint.
## Response
Whether the request was successful.
A human-readable result message.
The campaign details.
Campaign ID.
Campaign name.
Search keywords associated with the campaign.
LinkedIn search URL.
Current campaign status.
Total number of leads.
Campaign statistics and metrics.
```bash cURL theme={null}
curl -X GET https://api.linkedcamp.com/campaigns/60f7a1b2c3d4e5f6a7b8c9d0 \
-H "token: YOUR_API_TOKEN"
```
```python Python theme={null}
import requests
response = requests.get(
"https://api.linkedcamp.com/campaigns/60f7a1b2c3d4e5f6a7b8c9d0",
headers={"token": "YOUR_API_TOKEN"},
)
print(response.json())
```
```javascript JavaScript theme={null}
const response = await fetch(
"https://api.linkedcamp.com/campaigns/60f7a1b2c3d4e5f6a7b8c9d0",
{
headers: { "token": "YOUR_API_TOKEN" },
}
);
const data = await response.json();
console.log(data);
```
```json 200 theme={null}
{
"success": true,
"message": "Campaign found successfully!",
"data": {
"_id": "60f7a1b2c3d4e5f6a7b8c9d0",
"title": "Outreach Campaign",
"url": "https://www.linkedin.com/search/results/people/...",
"status": "ACTIVE",
"total": 150,
"stats": {}
}
}
```
```json 200 - Not found theme={null}
{
"success": false,
"message": "Campaign not found!"
}
```
# Get Campaign Stats
Source: https://docs.linkedcamp.com/api-reference/campaigns/get-campaign-stats
GET https://api.linkedcamp.com/campaigns/{campaignId}/stats
Returns analytics and statistics for a specific campaign, with optional date range filtering.
## Headers
Your LinkedCamp API token.
## Path Parameters
The ID of the campaign.
## Query Parameters
Optional user ID to filter stats by a specific user.
Optional JSON string specifying a date range for filtering stats.
Format: `{"from": "YYYY-MM-DD", "to": "YYYY-MM-DD"}`
Example: `range={"from": "2024-01-01", "to": "2024-01-31"}`
## Response
Whether the request was successful.
A human-readable result message.
The campaign ID.
```bash cURL theme={null}
curl -X GET 'https://api.linkedcamp.com/campaigns/60f7a1b2c3d4e5f6a7b8c9d0/stats?range={"from":"2024-01-01","to":"2024-01-31"}' \
-H "token: YOUR_API_TOKEN"
```
```python Python theme={null}
import json
import requests
response = requests.get(
"https://api.linkedcamp.com/campaigns/60f7a1b2c3d4e5f6a7b8c9d0/stats",
headers={"token": "YOUR_API_TOKEN"},
params={"range": json.dumps({"from": "2024-01-01", "to": "2024-01-31"})},
)
print(response.json())
```
```javascript JavaScript theme={null}
const range = JSON.stringify({ from: "2024-01-01", to: "2024-01-31" });
const url = `https://api.linkedcamp.com/campaigns/60f7a1b2c3d4e5f6a7b8c9d0/stats?range=${encodeURIComponent(range)}`;
const response = await fetch(url, {
headers: { "token": "YOUR_API_TOKEN" },
});
const data = await response.json();
console.log(data);
```
```json 200 theme={null}
{
"success": true,
"message": "Campaign stats found successfully!",
"campaignId": "60f7a1b2c3d4e5f6a7b8c9d0"
}
```
```json 400 theme={null}
{
"success": false,
"message": "Invalid range format. Must be JSON: {\"from\": \"YYYY-MM-DD\", \"to\": \"YYYY-MM-DD\"}"
}
```
# List Campaigns
Source: https://docs.linkedcamp.com/api-reference/campaigns/list-campaigns
GET https://api.linkedcamp.com/campaigns
Returns all campaigns for the authenticated user, optionally filtered by status.
## Headers
Your LinkedCamp API token.
## Query Parameters
Filter campaigns by status. You can pass multiple statuses separated by commas.
Available values: `PENDING`, `ACTIVE`, `PAUSED`, `DRAFTED`, `COMPLETED`, `FAILED`, `ARCHIVED`
Example: `status=ACTIVE` or `status=ACTIVE,PAUSED`
## Response
Whether the request was successful.
A human-readable result message.
Total number of campaigns returned.
Array of campaign objects.
Campaign ID.
Campaign name.
LinkedIn search URL associated with the campaign.
Current campaign status.
Total number of leads in the campaign.
```bash cURL theme={null}
curl -X GET "https://api.linkedcamp.com/campaigns?status=ACTIVE" \
-H "token: YOUR_API_TOKEN"
```
```python Python theme={null}
import requests
response = requests.get(
"https://api.linkedcamp.com/campaigns",
headers={"token": "YOUR_API_TOKEN"},
params={"status": "ACTIVE"},
)
print(response.json())
```
```javascript JavaScript theme={null}
const response = await fetch(
"https://api.linkedcamp.com/campaigns?status=ACTIVE",
{
headers: { "token": "YOUR_API_TOKEN" },
}
);
const data = await response.json();
console.log(data);
```
```json 200 theme={null}
{
"success": true,
"message": "ACTIVE campaigns found successfully!",
"total": 2,
"data": [
{
"_id": "60f7a1b2c3d4e5f6a7b8c9d0",
"title": "Outreach Campaign",
"url": "https://www.linkedin.com/search/results/people/...",
"status": "ACTIVE",
"total": 150
}
]
}
```
```json 200 - No results theme={null}
{
"success": false,
"message": "Compaigns not found!"
}
```
# Update Campaign Status
Source: https://docs.linkedcamp.com/api-reference/campaigns/update-campaign-status
PUT https://api.linkedcamp.com/campaigns/{campaignId}
Update the status of a specific campaign.
## Headers
Your LinkedCamp API token.
## Path Parameters
The ID of the campaign to update.
## Query Parameters
The new status to set for the campaign.
Available values: `ACTIVE`, `PAUSED`, `COMPLETED`, `FAILED`, `ARCHIVED`
## Response
Whether the request was successful.
A human-readable result message.
```bash cURL theme={null}
curl -X PUT "https://api.linkedcamp.com/campaigns/60f7a1b2c3d4e5f6a7b8c9d0?status=PAUSED" \
-H "token: YOUR_API_TOKEN"
```
```python Python theme={null}
import requests
response = requests.put(
"https://api.linkedcamp.com/campaigns/60f7a1b2c3d4e5f6a7b8c9d0",
headers={"token": "YOUR_API_TOKEN"},
params={"status": "PAUSED"},
)
print(response.json())
```
```javascript JavaScript theme={null}
const response = await fetch(
"https://api.linkedcamp.com/campaigns/60f7a1b2c3d4e5f6a7b8c9d0?status=PAUSED",
{
method: "PUT",
headers: { "token": "YOUR_API_TOKEN" },
}
);
const data = await response.json();
console.log(data);
```
```json 200 theme={null}
{
"success": true,
"message": "Campaign PAUSED successfully!"
}
```
```json 400 theme={null}
{
"success": false,
"message": "Campaign id is required!"
}
```
# Get Messages
Source: https://docs.linkedcamp.com/api-reference/conversations/get-messages
GET https://api.linkedcamp.com/conversations/{conversationId}
Returns all messages in a specific conversation.
## Headers
Your LinkedCamp API token.
## Path Parameters
The conversation ID. You can obtain this from the lead data via the [List Leads](/api-reference/leads/list-leads) or [Get Lead](/api-reference/leads/get-lead) endpoints.
## Response
Whether the request was successful.
A human-readable result message.
```bash cURL theme={null}
curl -X GET https://api.linkedcamp.com/conversations/60f7a1b2c3d4e5f6a7b8c9d1 \
-H "token: YOUR_API_TOKEN"
```
```python Python theme={null}
import requests
response = requests.get(
"https://api.linkedcamp.com/conversations/60f7a1b2c3d4e5f6a7b8c9d1",
headers={"token": "YOUR_API_TOKEN"},
)
print(response.json())
```
```javascript JavaScript theme={null}
const response = await fetch(
"https://api.linkedcamp.com/conversations/60f7a1b2c3d4e5f6a7b8c9d1",
{
headers: { "token": "YOUR_API_TOKEN" },
}
);
const data = await response.json();
console.log(data);
```
```json 200 theme={null}
{
"success": true,
"message": "Messages found successfully!"
}
```
```json 400 theme={null}
{
"success": false,
"message": "Conversation id is required!"
}
```
# Send Message
Source: https://docs.linkedcamp.com/api-reference/conversations/send-message
POST https://api.linkedcamp.com/conversations/send-message
Send a message to a prospect in an existing conversation.
## Headers
Your LinkedCamp API token.
## Body Parameters
The conversation ID. You can obtain this from the lead data via the [List Leads](/api-reference/leads/list-leads) or [Get Lead](/api-reference/leads/get-lead) endpoints.
The message content to send. Control characters are automatically sanitized.
## Response
Whether the request was successful.
A human-readable result message.
```bash cURL theme={null}
curl -X POST https://api.linkedcamp.com/conversations/send-message \
-H "token: YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"conversationId": "60f7a1b2c3d4e5f6a7b8c9d1",
"content": "Hi John, thanks for connecting! I wanted to reach out about..."
}'
```
```python Python theme={null}
import requests
response = requests.post(
"https://api.linkedcamp.com/conversations/send-message",
headers={"token": "YOUR_API_TOKEN"},
json={
"conversationId": "60f7a1b2c3d4e5f6a7b8c9d1",
"content": "Hi John, thanks for connecting! I wanted to reach out about...",
},
)
print(response.json())
```
```javascript JavaScript theme={null}
const response = await fetch(
"https://api.linkedcamp.com/conversations/send-message",
{
method: "POST",
headers: {
"token": "YOUR_API_TOKEN",
"Content-Type": "application/json",
},
body: JSON.stringify({
conversationId: "60f7a1b2c3d4e5f6a7b8c9d1",
content: "Hi John, thanks for connecting! I wanted to reach out about...",
}),
}
);
const data = await response.json();
console.log(data);
```
```json 200 theme={null}
{
"success": true,
"message": "Message sent successfully!"
}
```
```json 401 theme={null}
{
"success": false,
"message": "Conversation Id is required!"
}
```
# Add Leads to Campaign
Source: https://docs.linkedcamp.com/api-reference/leads/add-leads-to-campaign
POST https://api.linkedcamp.com/leads/add-to-campaign
Add one or more leads to an existing campaign. Leads are automatically deduplicated within the same campaign.
## Headers
Your LinkedCamp API token.
## Body Parameters
The ID of the campaign to add leads to. The campaign must not be in `DELETED` or `FAILED` status.
Array of lead objects to add.
LinkedIn profile URL of the lead. Supports standard LinkedIn URLs, Sales Navigator URLs, and Recruiter URLs.
Lead's first name.
Lead's last name.
Lead's full name. If not provided but firstName and lastName are, it will be auto-generated.
* Leads that already exist in the campaign (matched by `profileLink`) will be skipped.
* Sales Navigator and Recruiter URLs are automatically converted to standard LinkedIn URLs.
* You can pass additional custom fields on each lead object.
## Response
Whether the request was successful.
A human-readable result message.
```bash cURL theme={null}
curl -X POST https://api.linkedcamp.com/leads/add-to-campaign \
-H "token: YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"campaignId": "60f7a1b2c3d4e5f6a7b8c9d0",
"leads": [
{
"profileLink": "https://www.linkedin.com/in/johndoe",
"firstName": "John",
"lastName": "Doe"
},
{
"profileLink": "https://www.linkedin.com/in/janesmith",
"firstName": "Jane",
"lastName": "Smith"
}
]
}'
```
```python Python theme={null}
import requests
response = requests.post(
"https://api.linkedcamp.com/leads/add-to-campaign",
headers={"token": "YOUR_API_TOKEN"},
json={
"campaignId": "60f7a1b2c3d4e5f6a7b8c9d0",
"leads": [
{
"profileLink": "https://www.linkedin.com/in/johndoe",
"firstName": "John",
"lastName": "Doe",
},
{
"profileLink": "https://www.linkedin.com/in/janesmith",
"firstName": "Jane",
"lastName": "Smith",
},
],
},
)
print(response.json())
```
```javascript JavaScript theme={null}
const response = await fetch(
"https://api.linkedcamp.com/leads/add-to-campaign",
{
method: "POST",
headers: {
"token": "YOUR_API_TOKEN",
"Content-Type": "application/json",
},
body: JSON.stringify({
campaignId: "60f7a1b2c3d4e5f6a7b8c9d0",
leads: [
{
profileLink: "https://www.linkedin.com/in/johndoe",
firstName: "John",
lastName: "Doe",
},
{
profileLink: "https://www.linkedin.com/in/janesmith",
firstName: "Jane",
lastName: "Smith",
},
],
}),
}
);
const data = await response.json();
console.log(data);
```
```json 200 theme={null}
{
"success": true,
"message": "Leads added successfully"
}
```
```json 400 theme={null}
{
"success": false,
"message": "Failed to add leads into this campaign!"
}
```
# Get Lead
Source: https://docs.linkedcamp.com/api-reference/leads/get-lead
GET https://api.linkedcamp.com/leads/{leadId}
Returns detailed data for a specific lead including company information and conversations.
## Headers
Your LinkedCamp API token.
## Path Parameters
The ID of the lead.
## Response
Whether the request was successful.
A human-readable result message.
The lead details (same fields as in [List Leads](/api-reference/leads/list-leads)).
The lead's associated company data (if available).
```bash cURL theme={null}
curl -X GET https://api.linkedcamp.com/leads/60f7a1b2c3d4e5f6a7b8c9d0 \
-H "token: YOUR_API_TOKEN"
```
```python Python theme={null}
import requests
response = requests.get(
"https://api.linkedcamp.com/leads/60f7a1b2c3d4e5f6a7b8c9d0",
headers={"token": "YOUR_API_TOKEN"},
)
print(response.json())
```
```javascript JavaScript theme={null}
const response = await fetch(
"https://api.linkedcamp.com/leads/60f7a1b2c3d4e5f6a7b8c9d0",
{
headers: { "token": "YOUR_API_TOKEN" },
}
);
const data = await response.json();
console.log(data);
```
```json 200 theme={null}
{
"success": true,
"message": "Lead found successfully!",
"data": {
"lead": {
"profileLink": "https://www.linkedin.com/in/johndoe",
"fullName": "John Doe",
"firstName": "John",
"lastName": "Doe",
"status": "CONNECTED",
"headline": "CEO at Acme Corp",
"conversations": [
{
"type": "LINKEDIN",
"conversationId": "60f7a1b2c3d4e5f6a7b8c9d1"
}
]
},
"company": {
"name": "Acme Corp",
"industry": "Technology"
}
}
}
```
```json 200 - Not found theme={null}
{
"success": false,
"message": "Lead not found!",
"data": {
"lead": null,
"company": null
}
}
```
# List Leads
Source: https://docs.linkedcamp.com/api-reference/leads/list-leads
GET https://api.linkedcamp.com/leads
Returns leads for a specific campaign, optionally filtered by status.
## Headers
Your LinkedCamp API token.
## Query Parameters
The campaign ID to retrieve leads for.
Filter leads by status.
Available values: `FOUND`, `VIEWED`, `CONNECT_SENT`, `CONNECTED`, `REPLIED`, `MESSAGE_SENT`, `INMAILS`, `INMAIL_SENT`, `INMAIL_CREDIT`, `WITHDRAWN`
## Response
Whether the request was successful.
A human-readable result message.
Total number of leads returned.
Array of lead objects.
LinkedIn profile URL.
Sales Navigator profile URL.
Recruiter profile URL.
Lead's full name.
Lead's first name.
Lead's last name.
Whether the lead has a LinkedIn Premium account.
LinkedIn connection level (1st, 2nd, 3rd).
Current lead status in the campaign.
LinkedIn headline.
Job title/designation.
Lead's location.
LinkedIn bio/about section.
Contact information.
LinkedIn profile URN.
Associated conversation ID.
List of associated conversations with type and ID.
Campaign this lead belongs to.
Associated company ID.
```bash cURL theme={null}
curl -X GET "https://api.linkedcamp.com/leads?campaignId=60f7a1b2c3d4e5f6a7b8c9d0&status=CONNECTED" \
-H "token: YOUR_API_TOKEN"
```
```python Python theme={null}
import requests
response = requests.get(
"https://api.linkedcamp.com/leads",
headers={"token": "YOUR_API_TOKEN"},
params={
"campaignId": "60f7a1b2c3d4e5f6a7b8c9d0",
"status": "CONNECTED",
},
)
print(response.json())
```
```javascript JavaScript theme={null}
const response = await fetch(
"https://api.linkedcamp.com/leads?campaignId=60f7a1b2c3d4e5f6a7b8c9d0&status=CONNECTED",
{
headers: { "token": "YOUR_API_TOKEN" },
}
);
const data = await response.json();
console.log(data);
```
```json 200 theme={null}
{
"success": true,
"message": "Leads found successfully!",
"total": 25,
"data": [
{
"profileLink": "https://www.linkedin.com/in/johndoe",
"fullName": "John Doe",
"firstName": "John",
"lastName": "Doe",
"status": "CONNECTED",
"headline": "CEO at Acme Corp",
"location": "San Francisco, CA",
"conversations": [
{
"type": "LINKEDIN",
"conversationId": "60f7a1b2c3d4e5f6a7b8c9d1",
"url": "https://www.linkedin.com/messaging/thread/..."
}
]
}
]
}
```
# Update Lead
Source: https://docs.linkedcamp.com/api-reference/leads/update-lead
POST https://api.linkedcamp.com/leads/update
Update information for a specific lead across all campaigns it appears in.
## Headers
Your LinkedCamp API token.
## Body Parameters
The LinkedIn profile URL of the lead to update. Must be a valid `linkedin.com` URL.
Updated first name.
Updated last name.
Updated email address.
Email verification status. Defaults to `unknown` if an email is provided without a status.
Any additional fields passed in the request body will be stored as custom fields on the lead and campaign.
## Response
Whether the request was successful.
A human-readable result message.
```bash cURL theme={null}
curl -X POST https://api.linkedcamp.com/leads/update \
-H "token: YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"profileLink": "https://www.linkedin.com/in/johndoe",
"firstName": "John",
"lastName": "Doe",
"email": "john@acme.com",
"emailStatus": "valid",
"company": "Acme Corp",
"phone": "+1234567890"
}'
```
```python Python theme={null}
import requests
response = requests.post(
"https://api.linkedcamp.com/leads/update",
headers={"token": "YOUR_API_TOKEN"},
json={
"profileLink": "https://www.linkedin.com/in/johndoe",
"firstName": "John",
"lastName": "Doe",
"email": "john@acme.com",
"emailStatus": "valid",
"company": "Acme Corp",
"phone": "+1234567890",
},
)
print(response.json())
```
```javascript JavaScript theme={null}
const response = await fetch("https://api.linkedcamp.com/leads/update", {
method: "POST",
headers: {
"token": "YOUR_API_TOKEN",
"Content-Type": "application/json",
},
body: JSON.stringify({
profileLink: "https://www.linkedin.com/in/johndoe",
firstName: "John",
lastName: "Doe",
email: "john@acme.com",
emailStatus: "valid",
company: "Acme Corp",
phone: "+1234567890",
}),
});
const data = await response.json();
console.log(data);
```
```json 200 theme={null}
{
"success": true,
"message": "Lead updated successfully!"
}
```
```json 200 - Error theme={null}
{
"success": false,
"message": "Lead doesn't exists in this user campaigns!"
}
```
# Update Lead Status
Source: https://docs.linkedcamp.com/api-reference/leads/update-lead-status
PUT https://api.linkedcamp.com/leads/{leadId}
Pause, resume, or delete a lead in a campaign.
## Headers
Your LinkedCamp API token.
## Path Parameters
The ID of the lead.
## Query Parameters
The action to perform on the lead.
Available values:
* `PAUSE` - Pause outreach to this lead
* `RESUME` - Resume outreach to this lead
* `DELETED` - Soft-delete the lead from the campaign
## Response
Whether the request was successful.
A human-readable result message.
```bash cURL theme={null}
curl -X PUT "https://api.linkedcamp.com/leads/60f7a1b2c3d4e5f6a7b8c9d0?status=PAUSE" \
-H "token: YOUR_API_TOKEN"
```
```python Python theme={null}
import requests
response = requests.put(
"https://api.linkedcamp.com/leads/60f7a1b2c3d4e5f6a7b8c9d0",
headers={"token": "YOUR_API_TOKEN"},
params={"status": "PAUSE"},
)
print(response.json())
```
```javascript JavaScript theme={null}
const response = await fetch(
"https://api.linkedcamp.com/leads/60f7a1b2c3d4e5f6a7b8c9d0?status=PAUSE",
{
method: "PUT",
headers: { "token": "YOUR_API_TOKEN" },
}
);
const data = await response.json();
console.log(data);
```
```json 200 theme={null}
{
"success": true,
"message": "Lead PAUSE successfully"
}
```
```json 200 - Error theme={null}
{
"success": false,
"message": "Lead id is required!"
}
```
# API Reference Overview
Source: https://docs.linkedcamp.com/api-reference/overview
Complete reference for all LinkedCamp API endpoints
## Base URL
```
https://api.linkedcamp.com
```
## Available Endpoints
### Users
| Method | Endpoint | Description |
| ------ | ----------------- | ------------------------------ |
| GET | `/users/me` | Get current authenticated user |
| GET | `/users/{userId}` | Generate token for a user |
| POST | `/users/register` | Register a new sub-account |
| POST | `/users/pause` | Pause a sub-account |
| POST | `/users/resume` | Resume a sub-account |
| POST | `/users/cancel` | Cancel (delete) a sub-account |
### Campaigns
| Method | Endpoint | Description |
| ------ | ------------------------------- | ----------------------- |
| POST | `/campaigns` | Create a new campaign |
| GET | `/campaigns` | List all campaigns |
| GET | `/campaigns/{campaignId}` | Get a specific campaign |
| GET | `/campaigns/{campaignId}/stats` | Get campaign statistics |
| PUT | `/campaigns/{campaignId}` | Update campaign status |
### Leads
| Method | Endpoint | Description |
| ------ | ------------------------ | --------------------------------- |
| GET | `/leads` | List leads for a campaign |
| GET | `/leads/{leadId}` | Get a specific lead |
| POST | `/leads/update` | Update lead information |
| PUT | `/leads/{leadId}` | Pause, resume, or delete a lead |
| POST | `/leads/add-to-campaign` | Add leads to an existing campaign |
### Conversations
| Method | Endpoint | Description |
| ------ | --------------------------------- | ------------------------- |
| POST | `/conversations/send-message` | Send a message to a lead |
| GET | `/conversations/{conversationId}` | Get conversation messages |
### Webhooks
| Method | Endpoint | Description |
| ------ | ----------------------- | ---------------------- |
| POST | `/webhooks` | Create a webhook |
| GET | `/webhooks` | List all webhooks |
| GET | `/webhooks/{webhookId}` | Get a specific webhook |
| DELETE | `/webhooks/{webhookId}` | Delete a webhook |
### Tags
| Method | Endpoint | Description |
| ------ | -------- | ------------- |
| POST | `/tags` | Create a tag |
| GET | `/tags` | List all tags |
### Blacklists
| Method | Endpoint | Description |
| ------ | ------------- | ---------------------- |
| POST | `/blacklists` | Add a blacklist entry |
| GET | `/blacklists` | List blacklist entries |
### API Tokens
| Method | Endpoint | Description |
| ------ | --------- | ---------------------------------------- |
| GET | `/tokens` | Get API token for a sub-account (agency) |
# Create Tag
Source: https://docs.linkedcamp.com/api-reference/tags/create-tag
POST https://api.linkedcamp.com/tags
Create a new tag for organizing and categorizing leads.
## Headers
Your LinkedCamp API token.
## Body Parameters
The tag name.
The tag color (hex color code).
## Response
Whether the request was successful.
A human-readable result message.
```bash cURL theme={null}
curl -X POST https://api.linkedcamp.com/tags \
-H "token: YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "Hot Lead",
"color": "#FF5733"
}'
```
```python Python theme={null}
import requests
response = requests.post(
"https://api.linkedcamp.com/tags",
headers={"token": "YOUR_API_TOKEN"},
json={
"name": "Hot Lead",
"color": "#FF5733",
},
)
print(response.json())
```
```javascript JavaScript theme={null}
const response = await fetch("https://api.linkedcamp.com/tags", {
method: "POST",
headers: {
"token": "YOUR_API_TOKEN",
"Content-Type": "application/json",
},
body: JSON.stringify({
name: "Hot Lead",
color: "#FF5733",
}),
});
const data = await response.json();
console.log(data);
```
```json 200 theme={null}
{
"success": true,
"message": "Tag added successfully!"
}
```
```json 200 - Error theme={null}
{
"success": false,
"message": "Name is required!"
}
```
# List Tags
Source: https://docs.linkedcamp.com/api-reference/tags/list-tags
GET https://api.linkedcamp.com/tags
Returns all tags created by the authenticated user.
## Headers
Your LinkedCamp API token.
## Response
Whether the request was successful.
A human-readable result message.
Array of tag objects.
Tag name.
Tag color (hex code).
Creation timestamp.
Last update timestamp.
```bash cURL theme={null}
curl -X GET https://api.linkedcamp.com/tags \
-H "token: YOUR_API_TOKEN"
```
```python Python theme={null}
import requests
response = requests.get(
"https://api.linkedcamp.com/tags",
headers={"token": "YOUR_API_TOKEN"},
)
print(response.json())
```
```javascript JavaScript theme={null}
const response = await fetch("https://api.linkedcamp.com/tags", {
headers: { "token": "YOUR_API_TOKEN" },
});
const data = await response.json();
console.log(data);
```
```json 200 theme={null}
{
"success": true,
"message": "Tags found successfully!",
"data": [
{
"content": "Hot Lead",
"color": "#FF5733",
"createdAt": 1625000000000,
"updatedAt": 1625000000000
}
]
}
```
```json 200 - No results theme={null}
{
"success": false,
"message": "Tags not found!"
}
```
# Get API Token
Source: https://docs.linkedcamp.com/api-reference/tokens/get-api-token
GET https://api.linkedcamp.com/tokens
Retrieve the API token for a specific sub-account. This endpoint is only available to agency owners.
This endpoint requires an **agency owner** token.
## Headers
Token from the agency owner account.
## Query Parameters
The email address of the sub-account to retrieve the API token for.
## Response
Whether the request was successful.
A human-readable result message.
The API token for the specified sub-account.
```bash cURL theme={null}
curl -X GET "https://api.linkedcamp.com/tokens?accountEmail=user@example.com" \
-H "token: YOUR_AGENCY_OWNER_TOKEN"
```
```python Python theme={null}
import requests
response = requests.get(
"https://api.linkedcamp.com/tokens",
headers={"token": "YOUR_AGENCY_OWNER_TOKEN"},
params={"accountEmail": "user@example.com"},
)
print(response.json())
```
```javascript JavaScript theme={null}
const response = await fetch(
"https://api.linkedcamp.com/tokens?accountEmail=user@example.com",
{
headers: { "token": "YOUR_AGENCY_OWNER_TOKEN" },
}
);
const data = await response.json();
console.log(data);
```
```json 200 theme={null}
{
"success": true,
"message": "Api token found successfully!",
"token": "abc123..."
}
```
```json 400 theme={null}
{
"success": false,
"message": "Invalid agency owner token."
}
```
# Cancel Sub-Account
Source: https://docs.linkedcamp.com/api-reference/users/cancel-subaccount
POST https://api.linkedcamp.com/users/cancel
Cancel and delete a sub-account from an agency account.
This endpoint requires an **agency owner** token. This action is **irreversible**.
## Headers
Token from the agency owner account.
## Body Parameters
Email address of the sub-account to cancel.
Reason for cancelling the sub-account.
Detailed description of why the sub-account is being cancelled.
## Response
Whether the request was successful.
A human-readable result message.
```bash cURL theme={null}
curl -X POST https://api.linkedcamp.com/users/cancel \
-H "token: YOUR_AGENCY_OWNER_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"email": "jane@example.com",
"reason": "Client requested cancellation",
"description": "The client no longer needs LinkedIn outreach services."
}'
```
```python Python theme={null}
import requests
response = requests.post(
"https://api.linkedcamp.com/users/cancel",
headers={"token": "YOUR_AGENCY_OWNER_TOKEN"},
json={
"email": "jane@example.com",
"reason": "Client requested cancellation",
"description": "The client no longer needs LinkedIn outreach services.",
},
)
print(response.json())
```
```javascript JavaScript theme={null}
const response = await fetch("https://api.linkedcamp.com/users/cancel", {
method: "POST",
headers: {
"token": "YOUR_AGENCY_OWNER_TOKEN",
"Content-Type": "application/json",
},
body: JSON.stringify({
email: "jane@example.com",
reason: "Client requested cancellation",
description: "The client no longer needs LinkedIn outreach services.",
}),
});
const data = await response.json();
console.log(data);
```
```json 200 theme={null}
{
"success": true,
"message": "User deleted successfully!"
}
```
```json 401 theme={null}
{
"success": false,
"message": "Invalid user email!"
}
```
# Get Current User
Source: https://docs.linkedcamp.com/api-reference/users/get-current-user
GET https://api.linkedcamp.com/users/me
Returns the currently authenticated user along with their linked LinkedIn and email accounts.
## Headers
Your LinkedCamp API token.
## Response
Whether the request was successful.
A human-readable result message.
The user account details.
User's email address.
User's full name.
User's API key.
The linked LinkedIn account details.
LinkedIn account full name.
LinkedIn account email.
Whether the LinkedIn account is valid.
LinkedIn headline.
LinkedIn profile URL.
Sales Navigator profile URL.
Recruiter profile URL.
LinkedIn profile URN.
Profile picture URL.
Reason if the account is invalid.
Whether the account is paused.
List of connected email accounts.
Email account display name.
Email address.
Whether the email account is valid.
Whether the email account is paused.
Email account type.
```bash cURL theme={null}
curl -X GET https://api.linkedcamp.com/users/me \
-H "token: YOUR_API_TOKEN"
```
```python Python theme={null}
import requests
response = requests.get(
"https://api.linkedcamp.com/users/me",
headers={"token": "YOUR_API_TOKEN"},
)
print(response.json())
```
```javascript JavaScript theme={null}
const response = await fetch("https://api.linkedcamp.com/users/me", {
headers: { "token": "YOUR_API_TOKEN" },
});
const data = await response.json();
console.log(data);
```
```json 200 theme={null}
{
"success": true,
"message": "User found successfully!",
"user": {
"email": "user@example.com",
"fullName": "John Doe",
"apiKey": "abc123..."
},
"linkedAccount": {
"fullName": "John Doe",
"email": "john@linkedin.com",
"isValid": true,
"headline": "CEO at Acme Corp",
"profileLink": "https://www.linkedin.com/in/johndoe",
"isPaused": false
},
"emailAccounts": [
{
"fullName": "John Doe",
"email": "john@acme.com",
"isValid": true,
"isPaused": false,
"type": "GMAIL"
}
]
}
```
# Generate Token
Source: https://docs.linkedcamp.com/api-reference/users/get-token
GET https://api.linkedcamp.com/users/{userId}
Generates an authentication token for a specific user by their user ID.
This endpoint does **not** require the `token` header. It generates a token using the user ID directly.
## Path Parameters
The user ID to generate a token for.
## Response
Whether the request was successful.
A human-readable result message.
The generated authentication token.
```bash cURL theme={null}
curl -X GET https://api.linkedcamp.com/users/60f7a1b2c3d4e5f6a7b8c9d0
```
```python Python theme={null}
import requests
response = requests.get(
"https://api.linkedcamp.com/users/60f7a1b2c3d4e5f6a7b8c9d0"
)
print(response.json())
```
```javascript JavaScript theme={null}
const response = await fetch(
"https://api.linkedcamp.com/users/60f7a1b2c3d4e5f6a7b8c9d0"
);
const data = await response.json();
console.log(data);
```
```json 200 theme={null}
{
"success": true,
"message": "Token generated successfully!",
"token": "U2FsdGVkX1..."
}
```
# Pause Sub-Account
Source: https://docs.linkedcamp.com/api-reference/users/pause-subaccount
POST https://api.linkedcamp.com/users/pause
Pause a sub-account under an agency account.
This endpoint requires an **agency owner** token.
## Headers
Token from the agency owner account.
## Body Parameters
Email address of the sub-account to pause.
## Response
Whether the request was successful.
A human-readable result message.
```bash cURL theme={null}
curl -X POST https://api.linkedcamp.com/users/pause \
-H "token: YOUR_AGENCY_OWNER_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"email": "jane@example.com"
}'
```
```python Python theme={null}
import requests
response = requests.post(
"https://api.linkedcamp.com/users/pause",
headers={"token": "YOUR_AGENCY_OWNER_TOKEN"},
json={"email": "jane@example.com"},
)
print(response.json())
```
```javascript JavaScript theme={null}
const response = await fetch("https://api.linkedcamp.com/users/pause", {
method: "POST",
headers: {
"token": "YOUR_AGENCY_OWNER_TOKEN",
"Content-Type": "application/json",
},
body: JSON.stringify({ email: "jane@example.com" }),
});
const data = await response.json();
console.log(data);
```
```json 200 theme={null}
{
"success": true,
"message": "Sub-account paused successfully!"
}
```
```json 401 theme={null}
{
"success": false,
"message": "Invalid user email!"
}
```
# Register Sub-Account
Source: https://docs.linkedcamp.com/api-reference/users/register-subaccount
POST https://api.linkedcamp.com/users/register
Create a new sub-account under an agency account.
This endpoint requires an **agency owner** token.
## Headers
Token from the agency owner account.
## Body Parameters
Full name of the new sub-account user.
Email address for the new sub-account. Must be unique and not already registered.
The plan ID to assign to the sub-account. If not provided, defaults to "CUSTOMER".
## Response
Whether the request was successful.
A human-readable result message.
```bash cURL theme={null}
curl -X POST https://api.linkedcamp.com/users/register \
-H "token: YOUR_AGENCY_OWNER_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "Jane Smith",
"email": "jane@example.com",
"planId": "60f7a1b2c3d4e5f6a7b8c9d0"
}'
```
```python Python theme={null}
import requests
response = requests.post(
"https://api.linkedcamp.com/users/register",
headers={"token": "YOUR_AGENCY_OWNER_TOKEN"},
json={
"name": "Jane Smith",
"email": "jane@example.com",
"planId": "60f7a1b2c3d4e5f6a7b8c9d0",
},
)
print(response.json())
```
```javascript JavaScript theme={null}
const response = await fetch("https://api.linkedcamp.com/users/register", {
method: "POST",
headers: {
"token": "YOUR_AGENCY_OWNER_TOKEN",
"Content-Type": "application/json",
},
body: JSON.stringify({
name: "Jane Smith",
email: "jane@example.com",
planId: "60f7a1b2c3d4e5f6a7b8c9d0",
}),
});
const data = await response.json();
console.log(data);
```
```json 200 theme={null}
{
"success": true,
"message": "Sub-account added successfully!"
}
```
```json 401 theme={null}
{
"success": false,
"message": "User is already registered with this email!"
}
```
# Resume Sub-Account
Source: https://docs.linkedcamp.com/api-reference/users/resume-subaccount
POST https://api.linkedcamp.com/users/resume
Resume a previously paused sub-account under an agency account.
This endpoint requires an **agency owner** token.
## Headers
Token from the agency owner account.
## Body Parameters
Email address of the sub-account to resume.
## Response
Whether the request was successful.
A human-readable result message.
```bash cURL theme={null}
curl -X POST https://api.linkedcamp.com/users/resume \
-H "token: YOUR_AGENCY_OWNER_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"email": "jane@example.com"
}'
```
```python Python theme={null}
import requests
response = requests.post(
"https://api.linkedcamp.com/users/resume",
headers={"token": "YOUR_AGENCY_OWNER_TOKEN"},
json={"email": "jane@example.com"},
)
print(response.json())
```
```javascript JavaScript theme={null}
const response = await fetch("https://api.linkedcamp.com/users/resume", {
method: "POST",
headers: {
"token": "YOUR_AGENCY_OWNER_TOKEN",
"Content-Type": "application/json",
},
body: JSON.stringify({ email: "jane@example.com" }),
});
const data = await response.json();
console.log(data);
```
```json 200 theme={null}
{
"success": true,
"message": "Sub-account resumed successfully!"
}
```
```json 401 theme={null}
{
"success": false,
"message": "Invalid user email!"
}
```
# Create Webhook
Source: https://docs.linkedcamp.com/api-reference/webhooks/create-webhook
POST https://api.linkedcamp.com/webhooks
Create a webhook to receive real-time notifications when specific campaign events occur.
## Headers
Your LinkedCamp API token.
## Body Parameters
A descriptive name for the webhook.
The URL that will receive webhook POST requests when the event occurs.
The event type that triggers the webhook.
Available values:
| Event | Description |
| ----------------- | ------------------------------------ |
| `CONNECT_INVITED` | A connection request was sent |
| `ACCEPTS_REQUEST` | A connection request was accepted |
| `REPLY_DETECTED` | A reply was received from a prospect |
| `EMAIL_SENT` | An email was sent |
| `OPENED` | An email was opened |
| `BOUNCED` | An email bounced |
| `CLICKED` | A link in an email was clicked |
| `UNSUBSCRIBED` | A prospect unsubscribed |
## Response
Whether the request was successful.
A human-readable result message.
```bash cURL theme={null}
curl -X POST https://api.linkedcamp.com/webhooks \
-H "token: YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"title": "New Connection Webhook",
"callbackUrl": "https://your-server.com/webhook/linkedcamp",
"event": "ACCEPTS_REQUEST"
}'
```
```python Python theme={null}
import requests
response = requests.post(
"https://api.linkedcamp.com/webhooks",
headers={"token": "YOUR_API_TOKEN"},
json={
"title": "New Connection Webhook",
"callbackUrl": "https://your-server.com/webhook/linkedcamp",
"event": "ACCEPTS_REQUEST",
},
)
print(response.json())
```
```javascript JavaScript theme={null}
const response = await fetch("https://api.linkedcamp.com/webhooks", {
method: "POST",
headers: {
"token": "YOUR_API_TOKEN",
"Content-Type": "application/json",
},
body: JSON.stringify({
title: "New Connection Webhook",
callbackUrl: "https://your-server.com/webhook/linkedcamp",
event: "ACCEPTS_REQUEST",
}),
});
const data = await response.json();
console.log(data);
```
```json 200 theme={null}
{
"success": true,
"message": "Webhook added successfully!"
}
```
```json 400 theme={null}
{
"success": false,
"message": "Invalid event!"
}
```
# Delete Webhook
Source: https://docs.linkedcamp.com/api-reference/webhooks/delete-webhook
DELETE https://api.linkedcamp.com/webhooks/{webhookId}
Permanently delete a specific webhook.
## Headers
Your LinkedCamp API token.
## Path Parameters
The ID of the webhook to delete.
## Response
Whether the request was successful.
A human-readable result message.
```bash cURL theme={null}
curl -X DELETE https://api.linkedcamp.com/webhooks/60f7a1b2c3d4e5f6a7b8c9d0 \
-H "token: YOUR_API_TOKEN"
```
```python Python theme={null}
import requests
response = requests.delete(
"https://api.linkedcamp.com/webhooks/60f7a1b2c3d4e5f6a7b8c9d0",
headers={"token": "YOUR_API_TOKEN"},
)
print(response.json())
```
```javascript JavaScript theme={null}
const response = await fetch(
"https://api.linkedcamp.com/webhooks/60f7a1b2c3d4e5f6a7b8c9d0",
{
method: "DELETE",
headers: { "token": "YOUR_API_TOKEN" },
}
);
const data = await response.json();
console.log(data);
```
```json 200 theme={null}
{
"success": true,
"message": "Webhook deleted successfully!"
}
```
```json 200 - Error theme={null}
{
"success": false,
"message": "Invalid webhook ID!"
}
```
# Get Webhook
Source: https://docs.linkedcamp.com/api-reference/webhooks/get-webhook
GET https://api.linkedcamp.com/webhooks/{webhookId}
Returns data for a specific webhook.
## Headers
Your LinkedCamp API token.
## Path Parameters
The ID of the webhook.
## Response
Whether the request was successful.
A human-readable result message.
The webhook details.
Webhook ID.
The callback URL.
Webhook name.
List of events this webhook listens to.
Whether the webhook is active and valid.
```bash cURL theme={null}
curl -X GET https://api.linkedcamp.com/webhooks/60f7a1b2c3d4e5f6a7b8c9d0 \
-H "token: YOUR_API_TOKEN"
```
```python Python theme={null}
import requests
response = requests.get(
"https://api.linkedcamp.com/webhooks/60f7a1b2c3d4e5f6a7b8c9d0",
headers={"token": "YOUR_API_TOKEN"},
)
print(response.json())
```
```javascript JavaScript theme={null}
const response = await fetch(
"https://api.linkedcamp.com/webhooks/60f7a1b2c3d4e5f6a7b8c9d0",
{
headers: { "token": "YOUR_API_TOKEN" },
}
);
const data = await response.json();
console.log(data);
```
```json 200 theme={null}
{
"success": true,
"message": "Webhook found successfully!",
"data": {
"_id": "60f7a1b2c3d4e5f6a7b8c9d0",
"callbackUrl": "https://your-server.com/webhook/linkedcamp",
"title": "New Connection Webhook",
"events": ["ACCEPTS_REQUEST"],
"isValid": true
}
}
```
```json 200 - Not found theme={null}
{
"success": false,
"message": "Webhook not found!"
}
```
# List Webhooks
Source: https://docs.linkedcamp.com/api-reference/webhooks/list-webhooks
GET https://api.linkedcamp.com/webhooks
Returns all webhooks for the authenticated user.
## Headers
Your LinkedCamp API token.
## Response
Whether the request was successful.
A human-readable result message.
Array of webhook objects.
Webhook ID.
The callback URL.
Webhook name.
List of events this webhook listens to.
Whether the webhook is active and valid.
```bash cURL theme={null}
curl -X GET https://api.linkedcamp.com/webhooks \
-H "token: YOUR_API_TOKEN"
```
```python Python theme={null}
import requests
response = requests.get(
"https://api.linkedcamp.com/webhooks",
headers={"token": "YOUR_API_TOKEN"},
)
print(response.json())
```
```javascript JavaScript theme={null}
const response = await fetch("https://api.linkedcamp.com/webhooks", {
headers: { "token": "YOUR_API_TOKEN" },
});
const data = await response.json();
console.log(data);
```
```json 200 theme={null}
{
"success": true,
"message": "Webhooks found successfully!",
"data": [
{
"_id": "60f7a1b2c3d4e5f6a7b8c9d0",
"callbackUrl": "https://your-server.com/webhook/linkedcamp",
"title": "New Connection Webhook",
"events": ["ACCEPTS_REQUEST"],
"isValid": true
}
]
}
```
# Authentication
Source: https://docs.linkedcamp.com/authentication
Learn how to authenticate with the LinkedCamp API
## API Token Authentication
The LinkedCamp API uses token-based authentication. Every authenticated request must include a `token` header containing your API key.
```bash theme={null}
curl -X GET https://api.linkedcamp.com/users/me \
-H "token: YOUR_API_TOKEN"
```
## Obtaining Your API Token
There are two ways to get your API token:
### From the Dashboard
1. Log in to your [LinkedCamp account](https://app.linkedcamp.com)
2. Navigate to **Settings** > **API**
3. Copy your API token
### Via the API (Agency Owners)
Agency owners can retrieve API tokens for their sub-accounts using the [Get API Token](/api-reference/tokens/get-api-token) endpoint:
```bash theme={null}
curl -X GET "https://api.linkedcamp.com/tokens?accountEmail=user@example.com" \
-H "token: AGENCY_OWNER_TOKEN"
```
## Request Headers
All API requests require the following headers:
| Header | Required | Description |
| -------------- | -------- | ------------------------------------------ |
| `token` | Yes | Your LinkedCamp API token |
| `Content-Type` | Yes\* | `application/json` (for POST/PUT requests) |
The `Content-Type` header is only required for requests that include a JSON body (POST and PUT methods).
## Authentication Errors
If authentication fails, the API returns:
```json theme={null}
{
"success": false,
"message": "Invalid Token!"
}
```
Common reasons for authentication failures:
| Error Message | Cause |
| -------------------- | ----------------------------------------------------------- |
| `Token is required!` | The `token` header is missing from the request |
| `Invalid Token!` | The token is incorrect, expired, or the account is inactive |
| `User not found!` | No active user account is associated with the token |
## Token Requirements
* The token must belong to an **active** user account
* The user must have a **current plan** assigned
* Tokens are validated on every request and the `lastUsedAt` timestamp is updated automatically
# Introduction
Source: https://docs.linkedcamp.com/introduction
Welcome to the LinkedCamp API documentation
## Overview
The LinkedCamp API allows you to programmatically manage your LinkedIn outreach campaigns, leads, conversations, webhooks, and more. Use this API to integrate LinkedCamp into your existing workflows, CRMs, and automation tools.
## Base URL
All API requests should be made to:
```
https://api.linkedcamp.com
```
## Key Features
Create, manage, and track LinkedIn outreach campaigns programmatically.
Add leads to campaigns, update lead data, and track lead statuses.
Send messages to prospects and retrieve conversation histories.
Set up real-time notifications for campaign events like connection accepts or replies.
## Quick Start
Log in to your LinkedCamp account and retrieve your API token from the settings page. Alternatively, agency owners can use the [Get API Token](/api-reference/tokens/get-api-token) endpoint.
Include your API token in the `token` header of every request.
```bash theme={null}
curl -H "token: YOUR_API_TOKEN" https://api.linkedcamp.com/users/me
```
You're ready to create campaigns, manage leads, and integrate LinkedCamp into your workflows.
## Response Format
All API responses follow a consistent JSON structure:
```json theme={null}
{
"success": true,
"message": "Descriptive message about the result",
"data": {}
}
```
| Field | Type | Description |
| --------- | ------- | ---------------------------------------------- |
| `success` | boolean | Whether the request was successful |
| `message` | string | A human-readable message describing the result |
| `data` | object | The response payload (varies per endpoint) |