> ## Documentation Index
> Fetch the complete documentation index at: https://docs.emailx.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Review and launch a LinkedIn campaign

> Preview contact eligibility, import a bounded LinkedIn audience, review local readiness, explicitly activate scheduled dispatch, inspect saved progress, and resume a paused campaign.

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.

> [!NOTE]
>
> 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](https://docs.emailx.ai/en/api-reference/import-contacts/check-contacts-eligibility.md) 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](https://docs.emailx.ai/en/api-reference/prospects/import-linkedin-profiles.md). 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](https://docs.emailx.ai/en/api-reference/jobs/get-job.md) and inspect its [row results](https://docs.emailx.ai/en/api-reference/prospects/list-linkedin-import-results.md). Operation reads require `operations:read` and `campaigns:read`. If the create response is uncertain or lost, inspect [workspace operations](https://docs.emailx.ai/en/api-reference/jobs/list-jobs.md) 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](https://docs.emailx.ai/en/api-reference/launch-linkedin/check-linkedin-launch.md). 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.

```bash theme={null}
curl -X POST "$EMAILX_BASE_URL/api/v1/workspaces/123/campaigns/linkedin/456/reviews" \
  -H "Authorization: Bearer $EMAILX_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: linkedin-review-2026-11-001" \
  --data '{"expected_revision":"COPY_THE_CURRENT_CAMPAIGN_REVISION"}'
```

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](https://docs.emailx.ai/en/api-reference/launch-linkedin/launch-linkedin.md) 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.

```bash theme={null}
curl -X POST "$EMAILX_BASE_URL/api/v1/workspaces/123/campaigns/linkedin/456/launch" \
  -H "Authorization: Bearer $EMAILX_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: linkedin-launch-2026-11-001" \
  --data '{"review_id":"COPY_THE_REVIEW_ID","confirm_launch":true}'
```

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](https://docs.emailx.ai/en/api-reference/running/get-linkedin-progress.md) and, when needed, a [prospect's saved state](https://docs.emailx.ai/en/api-reference/prospects/get-linkedin-prospect.md). Counts and timestamps reflect locally saved records, not provider acceptance or completed delivery.

Use [Pause a campaign](https://docs.emailx.ai/en/api-reference/running/pause-campaign.md) 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](https://docs.emailx.ai/en/api-reference/launch-linkedin/check-linkedin-resume.md) 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.

```bash theme={null}
curl -X POST "$EMAILX_BASE_URL/api/v1/workspaces/123/campaigns/linkedin/456/resume-reviews" \
  -H "Authorization: Bearer $EMAILX_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: linkedin-resume-review-2026-11-001" \
  --data '{"expected_revision":"COPY_THE_CURRENT_CAMPAIGN_REVISION"}'
```

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](https://docs.emailx.ai/en/api-reference/launch-linkedin/resume-linkedin.md) with the review ID and `confirm_resume: true`. The request returns `202` with a `linkedin.resume` operation.

```bash theme={null}
curl -X POST "$EMAILX_BASE_URL/api/v1/workspaces/123/campaigns/linkedin/456/resume" \
  -H "Authorization: Bearer $EMAILX_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: linkedin-resume-2026-11-001" \
  --data '{"review_id":"COPY_THE_RESUME_REVIEW_ID","confirm_resume":true}'
```

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.

## Related guides

* [Templates and LinkedIn imports](https://docs.emailx.ai/en/overview/templates-and-linkedin-imports.md)
* [Campaign setup](https://docs.emailx.ai/en/overview/campaign-setup.md)
* [Idempotency and recovery](https://docs.emailx.ai/en/api-reference/idempotency.md)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.