Write

Create or Update Campaign

Creates a new campaign or updates an existing one in a single call. Omit campaign_id to create (requires name, kind, and either a list_id or inline contacts) or provide it to update. Choose acquisition for invite-based outreach to new first-degrees or relationship for DM-only outreach to existing connections, with a URL-safe slug auto-derived from the name.

upsert_campaignPOST/api/v1/campaigns/upsert
crispy — bash

Example prompt: Create an acquisition campaign called Q2 Outreach sourced from my fintech-vps list

{
  "campaign_id": "q2-outreach",
  "name": "Q2 Outreach",
  "kind": "acquisition",
  "created": true
}
Permission scope
core
Access
Write
Category
Campaigns

What you can build

Spin up a new acquisition campaign from an existing list in one step
Launch a relationship campaign that only DMs your first-degree connections
Update a campaign's source or settings without recreating it
Override the auto-derived slug to resolve a name collision

Parameters

Inputs accepted by upsert_campaign.

NameTypeDescription
campaign_idstringCampaign ID to update. Omit to create a new campaign.
idstringOptional URL-safe slug for creation (3-50 chars: lowercase a-z, 0-9, hyphens; starts/ends alphanumeric). Auto-derived from name when omitted. Provide to override or to resolve a name collision.
namestringCampaign name (required for creation; the slug id is derived from it).
kind"acquisition" | "relationship"REQUIRED for creation. 'acquisition' = invite-based outreach to new 1st-degrees (filters out existing connections). 'relationship' = DM-only to existing 1st-degree connections (requires DISTANCE_1).
list_idstringExisting list ID to use as prospect source (alternative to contacts).
contactsobject[]Inline ContactRef array for creation (alternative to list_id).

The complete LinkedIn API. Ready when you are.

Connect your first LinkedIn profile in under 5 minutes. Every tool, every seat, no feature gates. Safe limits, warm-up, and full permission control built in.