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 requirescontacts: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 currentrevision. 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 currentrevision 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.
4. Explicitly activate scheduled dispatch
Only after reviewing a ready, unexpired result, call Launch a LinkedIn campaign with that review ID andconfirm_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.
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 isqueued 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 currentrevision 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.
confirm_resume: true. The request returns 202 with a linkedin.resume operation.
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.

