Skip to main content
Use this workflow to prepare and explicitly activate a manual LinkedIn campaign through the API. A read-only People selection snapshot can help you inspect contact eligibility. LinkedIn profile imports add a bounded audience to a draft, and a separate short-lived review must pass before the explicit launch request can activate scheduled dispatch.
Check workspace capabilities before starting. Reviewed launch must be enabled for your workspace and your key needs campaigns:launch. If you receive 503 feature_unavailable, ask your workspace administrator about access.

1. Preview contact eligibility

Use People selection with either a list of contact IDs or allowlisted filters. The request requires contacts:read and an idempotency key. The response is a read-only snapshot with eligibility and blocker codes. It does not edit contacts, enroll them, or create a campaign audience. Refine the selection and review the returned IDs before continuing. For a LinkedIn campaign, profile imports use explicit HTTPS canonical LinkedIn profile URLs. They do not use a People selection result as an implicit import instruction. Keep each import to at most 100 profiles. Provider profile lookups can consume the workspace’s LinkedIn lookup quota.

2. Prepare an inactive manual draft

Create or select an inactive LinkedIn draft. Configure its audience, supported steps, sender, and schedule, then read the campaign configuration and retain its current revision. Configuration writes require the configuration scope and expected_revision; a stale revision means another change occurred, so read the latest configuration and reconcile before editing again. Queue explicit profile URLs with Create a LinkedIn import operation. Include the latest expected_revision and the selected sender_id. Imports are bounded to 100 rows and may consume provider lookup quota. A queued import adds profiles to the draft; it does not launch the campaign, approve content, or send outreach. Poll the operation and inspect its row results. Operation reads require operations:read and campaigns:read. If the create response is uncertain or lost, inspect workspace operations and reconcile the original result. Never automatically resubmit an import after an unknown outcome.

3. Request a readiness review

After the audience and campaign configuration are ready, read the configuration again and use its current revision as expected_revision when requesting a LinkedIn launch review. Reading the configuration requires campaigns:read; the review request requires campaigns:launch, plus applicable workspace access. Reviews expire after five minutes. Treat expires_at as authoritative and request a fresh review if it has expired. A changed configuration, audience, sender, or other reviewed dependency can also make the review stale. The review reports blockers and warnings based on local state only.
The review does not verify LinkedIn account health, reserve quota, generate or approve content, or guarantee delivery. Resolve blockers in Emailx, read the latest configuration, and request a fresh review. Do not reuse an expired, stale, or blocked review.

4. Explicitly activate scheduled dispatch

Only after reviewing a ready, unexpired result, call Launch a LinkedIn campaign with that review ID and confirm_launch: true. The launch request requires campaigns:launch, plus applicable workspace access. Reading configuration, campaign progress and operation receipts requires campaigns:read; operation receipts also require operations:read. The request returns 202 with a durable operation. Use an idempotency key for the logical launch request.
The service rechecks the review and local dependencies before activation. Later sending follows the campaign’s configured windows through scheduled dispatch. This request does not start an immediate batch, and the operation receipt does not verify delivery. If the launch response is lost or uncertain, read the original operation or list workspace operations. Do not automatically retry or create a new key for the same launch. If the operation is still queued and has not started, cancel it only when the API confirms cancellation is safe. Inspect error_code and operation status; resolve awaiting_user_action or needs_reconciliation before starting another logical launch. Request a fresh review after a stale or expired review, then use a new idempotency key only for a new launch after the earlier outcome is known and safe.

5. Inspect progress and pause when needed

Poll the operation while it is queued or running. Stop when it becomes succeeded, failed, cancelled, awaiting_user_action, or needs_reconciliation. The last two states need a person to inspect error_code, resolve the issue, and decide what action is safe; they do not continue on their own. A successful receipt means the campaign is active for scheduled sending within its configured windows. It does not mean a connection request or message was delivered. Read campaign progress and, when needed, a prospect’s saved state. Counts and timestamps reflect locally saved records, not provider acceptance or completed delivery. Use Pause a campaign if you need to stop future scheduled activity. Review campaign progress and prospect details in Emailx when a status or saved timestamp needs investigation.

6. Resume a paused campaign

A paused manual LinkedIn campaign that was launched before can be resumed through the API. Resume uses its own review. A launch review is rejected, and a resume review cannot launch a draft. Read the configuration, then request a resume review with the current revision as expected_revision. The review requires campaigns:launch and expires after five minutes. It reports audience counts: saved prospects, prospects with remaining work, suppressed prospects and invitation attempts with an uncertain outcome.
The review is blocked when an invitation attempt has an uncertain outcome, an import is still running, the campaign uses AI sourcing or a non-normal mode, or a selected sender, seat or plan is no longer available. Resolve the blocker in Emailx and request a fresh review. Resume never clears an uncertain attempt for you. After the user explicitly confirms, call Resume a LinkedIn campaign with the review ID and confirm_resume: true. The request returns 202 with a linkedin.resume operation.
The worker rechecks your access and every reviewed dependency, then sets the campaign active. The periodic scheduler continues future work inside the configured windows. Saved progress, launch time and sender assignment stay unchanged, no launch batch runs and no immediate backlog is sent. A succeeded receipt reports dispatch_mode: "native_periodic_scheduler" and delivery_verified: false. If the campaign or its prospects changed after the review, the operation becomes awaiting_user_action and the campaign stays paused. Request a fresh review before trying again.

Email campaigns

Email API campaign creation and configuration remain inactive draft operations. This LinkedIn review and activation flow does not launch email campaigns or send email.