# 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) |