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

Run LinkedIn workflows from the AI client you already use.

Create your account, connect LinkedIn, create an API key, then add Crispy to your client. Review the docs for supported workflows and safety controls.