Skip to main content
LinkedIn Ads is a read + guardrailed write connector. Tools are called via tools/call over POST /linkedin-ads/mcp. The connector is connected with OAuth (LinkedIn login). See Forbind din konto.
Endpoint: https://mcp.consile.ai/linkedin-ads/mcp. LinkedIn Ads is its own named connector with only its own tools. Tool names are namespaced as linkedin-ads__<tool> in the transport (e.g. linkedin-ads__list_ad_accounts); the AI resolves these automatically.
This connector can write. Ad-management write tools create objects in DRAFT by default (no serving, no spend). Any action that spends (status → ACTIVE), changes a budget or bid, archives/deletes, or publishes public content requires explicit confirm: true; otherwise the tool returns a dry-run preview and calls no upstream API. See Handlinger & guardrails.

Scopes & authentication

The connector requests three OAuth scopes from LinkedIn: The organization, member-profile, and organic-social scopes (r_organization_admin, r_organization_social, w_organization_social, w_member_social, r_basicprofile, r_1st_connections_size) are not requested in v1 because LinkedIn rejects the full authorization if any requested scope is unapproved. Until the app receives Community Management API approval, the tools that need those scopes are exposed but fail with HTTP 403 “insufficient scope”. That covers all 8 organic-social write tools and these reads:
  • get_organization, get_organization_follower_count, list_organization_posts
  • get_organization_page_statistics, get_organization_follower_statistics, get_organization_share_statistics
  • get_my_profile, get_my_connections_count
The ad, reporting, targeting, conversion, and lead-form read tools work on the v1 scope set. The remaining organization, post, and social reads (get_post, get_post_social_metadata, list_post_comments, list_post_reactions, list_administered_organizations, find_organization_by_vanity_name) also fail with HTTP 403 under the current ad-scope access, alongside the tools listed above, until Community Management API approval.
The connector is connected through the standard GenericOAuthConnectFlow, and the per-call access token is refreshed transparently on the read path by the platform’s RefreshingVault. The connector itself is access-token only (it never refreshes). If LinkedIn rejects the token (HTTP 401), the tool surfaces a clear reconnect signal: re-authorize in the portal.

Guardrail model (write tools)

All 19 write tools pass through the connector-local applyOrPreview guardrail. The rules are:
  1. New ad objects (create_campaign_group, create_campaign) are created in DRAFT status by default. They do not serve and do not spend.
  2. New organic posts (create_organization_post, create_member_post) default to DRAFT lifecycle. They are not publicly visible.
  3. Confirmation required (confirm: true) whenever the action:
    • sets status to ACTIVE (starts serving / spending);
    • sets status to ARCHIVED (destructive);
    • changes a budget or bid amount;
    • publishes public content (a post, comment, or reaction);
    • removes a campaign↔conversion association.
  4. Without confirm: true, the tool returns a WritePreview object (the exact method, path, and body it would send) and calls no upstream API.
  5. Setting status to PAUSED or DRAFT is always safe and applies without confirmation (stops serving/spend immediately).
These are designed-in safety defaults enforced in connector application logic, not an unbreakable platform gate. See Handlinger & guardrails for the full model.

WritePreview shape

When a confirmation-gated tool is called without confirm: true, it returns:

Shared parameters

Numeric ids

Most tools take bare numeric id strings (digits only, no URN prefix). The connector builds the required URNs internally.
string
required
LinkedIn ad account id (digits only). Obtain from list_ad_accounts or search_ad_accounts.
string
Campaign group id (digits only). From list_campaign_groups.
string
Campaign id (digits only). From list_campaigns.
string
Organization (Company Page) id (digits only). From list_administered_organizations.

Money format

All money values (budgets, bids, conversion values) use LinkedIn’s major-unit format: a decimal string plus a currency code (not micros).
The currencyCode must match the ad account’s currency. Supply amounts as dailyBudgetAmount / totalBudgetAmount / unitCostAmount (string) plus currencyCode (ISO 4217 three-letter code).

Limit

integer
default:"100"
Maximum rows returned by list/finder tools (max 1000). The client paginates internally and returns up to limit elements.

Analytics facet

The analytics tools (get_ad_analytics, get_ad_statistics, get_ad_demographics, get_attributed_revenue) require exactly one of these facets:
string[]
Ad account ids to report on (most common).
string[]
Campaign ids to report on.
string[]
Campaign group ids to report on.

Client limits

client.ts pins these transport limits:
  • API version: requests to the versioned Marketing API (/rest/*) carry LinkedIn-Version: 202605. The legacy /v2/* surface (member profile, connections) carries no version header.
  • Timeout: 15 seconds per call.
  • Pagination: list/finder tools follow up to 25 pages of ~50 rows. Every documented tool passes limit ?? 100, so the effective default is 100 rows per call; limit (max 1000) tightens or widens that, and a raw getList with no limit caps at 500 rows.
The analytics response caps are LinkedIn-side limits, not enforced in client.ts: get_ad_analytics / get_ad_statistics return a single, non-paginated response that LinkedIn caps at 15,000 elements, and accept at most 20 metric fields per call.

Read tools (45)

Ad accounts & structure

list_ad_accounts

List every ad account the connected member can access, with account URN and role. The entry point that yields the account ids all other tools take.
integer
default:"100"

search_ad_accounts

Search accessible ad accounts with full detail (currency, status, servingStatuses, type). No filter returns all accessible accounts.
string[]
Filter by account status. Enum: ACTIVE DRAFT CANCELED PENDING_DELETION REMOVED.
integer
default:"100"

get_ad_account

Fetch one ad account by id: currency, status, type, servingStatuses, reference, notification flags, test flag.
string
required

list_ad_account_users

List all users and roles on a given ad account (audit who has access). Inverse of list_ad_accounts.
string
required
integer
default:"100"

list_campaign_groups

Search/list campaign groups under an account (the budget/status container above campaigns): name, status, runSchedule, totalBudget/dailyBudget, objective.
string
required
string[]
Filter by status. Enum: ACTIVE PAUSED DRAFT ARCHIVED REMOVED.
integer
default:"100"

get_campaign_group

Fetch one campaign group: name, status, runSchedule, totalBudget/dailyBudget, servingStatuses, objective.
string
required
string
required

list_campaigns

Search/list campaigns within an account: status, type, objectiveType, costType, budgets, bid (unitCost), runSchedule, targetingCriteria, servingStatuses.
string
required
string[]
Filter by status. Enum: ACTIVE PAUSED DRAFT ARCHIVED COMPLETED REMOVED.
string
Scope to one campaign group id.
integer
default:"100"

get_campaign

Fetch one campaign with full targetingCriteria, budgets, bid (unitCost), runSchedule, objectiveType, optimizationTargetType, servingStatuses, versionTag.
string
required
string
required

list_creatives

Search/list creatives (ads) under an account: reference, status (intendedStatus), variant content.
string
required
integer
default:"100"

get_creative

Fetch one creative by its URN (status, content reference, variant/intendedStatus).
string
required
string
required
The creative URN, e.g. urn:li:sponsoredCreative:123.

get_ad_preview

Render a preview of an existing creative in a placement, matching the render LinkedIn Campaign Manager shows.
string
required
string
required
urn:li:sponsoredCreative:123 to preview.

Reporting & analytics

get_ad_analytics

Core single-pivot performance report: group metrics by one dimension over a date range and time granularity. Cost fields are decimal strings in the account currency (not micros).
string
required
Dimension to group by. One of: COMPANY ACCOUNT SHARE CAMPAIGN CREATIVE CAMPAIGN_GROUP CONVERSION CONVERSION_COMPONENT OBJECTIVE_TYPE SERVING_LOCATION PLACEMENT_NAME IMPRESSION_DEVICE_TYPE, plus the MEMBER_* demographic set (see get_ad_demographics).
string
default:"ALL"
Time bucketing: ALL (one total) | DAILY | MONTHLY | YEARLY.
string
required
Report window start (YYYY-MM-DD).
string
required
Report window end (YYYY-MM-DD).
string[]
Ad account ids (most common facet; provide exactly one facet).
string[]
Campaign ids (alternative facet).
string[]
Campaign group ids (alternative facet).
string
CSV of metric fields (max 20). Defaults to: impressions,clicks,costInLocalCurrency,externalWebsiteConversions,oneClickLeads,landingPageClicks.

get_ad_statistics

Multi-dimensional report: group metrics by up to three pivots at once (e.g. CAMPAIGN × CREATIVE × SERVING_LOCATION) for cross-tabs the single-pivot finder cannot express.
string[]
required
1–3 dimensions from the same enum as get_ad_analytics.
string
default:"ALL"
string
required
string
required
string[]
string[]
string[]
string

get_ad_demographics

Professional-demographic breakdown: analytics pivoted by a MEMBER_* dimension (company/size/industry/seniority/job title/function/country/region): “who saw or engaged with my ads”. Data is delayed approximately 12–24 hours; resolve the returned URNs with resolve_targeting_urns.
string
required
One of: MEMBER_COMPANY MEMBER_COMPANY_SIZE MEMBER_INDUSTRY MEMBER_SENIORITY MEMBER_JOB_TITLE MEMBER_JOB_FUNCTION MEMBER_COUNTRY_V2 MEMBER_REGION_V2 MEMBER_COUNTY.
string
required
string
required
string[]
string[]
string[]
string
Defaults to impressions,clicks,costInLocalCurrency.

get_attributed_revenue

CRM revenue-attribution report (ROAS, won/open opportunities, deal size, days-to-close) by ACCOUNT / CAMPAIGN_GROUP / CAMPAIGN. Returns empty results unless the advertiser has connected a CRM to Business Manager.
string
required
string[]
default:"[\"CAMPAIGN\"]"
1–3 from ACCOUNT CAMPAIGN_GROUP CAMPAIGN.
string
required
string
required
string
CSV of revenueAttributionMetrics fields.

get_budget_pricing

Suggested, minimum and maximum bids plus daily-budget limits for a bid/campaign type on an account. Forecast only. No spend.
string
required
string
required
e.g. CPM, CPC, CPV.
string
required
e.g. SPONSORED_UPDATES, TEXT_AD, DYNAMIC.
string
Optional bid match type.
string
Advanced: a pre-built RestLi targetingCriteria fragment (passed verbatim).
Returns {amount, currencyCode} money objects.

forecast_ad_supply

Forecast impressions, clicks, spend, reach, and leads for a hypothetical campaign’s targeting + competing bid over a time range.
string
required
e.g. SPONSORED_UPDATES.
string
required
A pre-built RestLi targeting fragment (target.includedTargetingFacets:...).
integer
required
Forecast window start (epoch ms).
integer
required
Forecast window end (epoch ms).
string
Optional competing bid fragment.

get_organization_page_statistics

Organization page view and click statistics. Lifetime breakdown (by geo, country, function, industry, seniority, staffCountRange) is shown when no time interval is given. Returns HTTP 403 until the app is approved for the Community Management API.
string
required

get_organization_follower_statistics

Follower demographics (lifetime, by 7 facets). The total count is not here. Use get_organization_follower_count for that. Returns HTTP 403 until Community Management API approval.
string
required

get_organization_share_statistics

Organic engagement stats for an org’s posts: aggregate lifetime stats (impressions, clicks, likes, comments, shares, engagement rate). Organic only. For sponsored content use get_ad_analytics. Returns HTTP 403 until Community Management API approval.
string
required

Audiences & targeting

get_audience_count

Estimate the reachable LinkedIn audience size (active + total) for a targetingCriteria expression. Validates the 300-member campaign minimum before launch. Returns total: 0 when the audience is below LinkedIn’s privacy floor.
string
required
A pre-built RestLi targetingCriteria fragment. Build facet URNs with the targeting tools below.

list_targeting_facets

List all targeting facet categories (industries, titles, seniorities, skills, locations, jobFunctions, staffCountRanges, interests, etc.) and which entity finders each supports. The catalog you build targetingCriteria from. No arguments.

list_targeting_entities

Enumerate all values for an enumerable facet (e.g. seniorities, genders, jobFunctions, ageRanges), resolving closed-list facets to URNs.
string
required
The facet name (e.g. seniorities) or a full adTargetingFacet URN.
string
Optional locale, e.g. en_US.
integer
default:"100"

typeahead_targeting_entities

Free-text search for targeting entity URNs within a facet (find geo / skill / company / title / field-of-study URNs). The main way to turn natural-language words into targeting URNs.
string
required
The facet name (e.g. locations, skills) or a full adTargetingFacet URN.
string
required
Free-text search, e.g. Copenhagen or machine learning.
string
Optional locale, e.g. en_US.
integer
default:"100"

similar_targeting_entities

Given seed entity URN(s) in a facet, return similar entities (lookalike companies / industries / skills / titles) for audience expansion.
string
required
The facet name or a full adTargetingFacet URN.
string[]
required
Seed entity URNs (at least one).
integer
default:"100"

resolve_targeting_urns

Resolve a batch of entity URNs to human-readable names and facet membership (e.g. urn:li:geo:102095887"California, United States") to display a campaign’s stored targeting or demographics.
string[]
required
Entity URNs to resolve (at least one).

Conversions & Insight Tag

list_conversion_rules

List all conversion rules for an ad account (including conversionMethod=CONVERSIONS_API and enabled flags). The value field is {currencyCode, amount} in major units.
string
required
integer
default:"100"

get_conversion_rule

Fetch one conversion rule by id: type, attribution windows, value, urlMatchRuleExpression, associated campaigns, imagePixelTag.
string
required
string
required
Numeric conversion id (digits only).

get_insight_tag

Find the Insight Tag for an ad account and retrieve its tracking snippet and firstParty state.
string
required

list_insight_tag_domains

List domains observed firing the account’s Insight Tag (most recent first) with blocked status and last-callback time. Verify tag installation.
string
required
integer
default:"100"

list_campaign_conversions

List all conversion-rule associations for one or more campaigns (which campaigns attribute which conversions).
string[]
required
Campaign ids to look up (at least one).
integer
default:"100"

Lead form definitions

These tools expose form structure only: questions, hidden fields, consent text, post-submission CTA. Retrieving actual submitted lead PII requires the separate LinkedIn Lead Sync API program (r_marketing_leadgen_automation), which is not part of this connector.

list_lead_forms

List lead gen form definitions for an ad account.
string
required
integer
default:"100"

get_lead_form

Fetch one lead gen form definition by id (full questions, hidden fields, consents, post-submission CTA).
string
required
Numeric form id (digits only).

Organization pages & organic content (read)

These reads need org/social scopes that v1 does not request, so they return HTTP 403 under the current ad-scope access until Community Management API approval: the org-profile, follower-count, feed, and page/follower/share statistics reads, the individual post/social reads (get_post, get_post_social_metadata, list_post_comments, list_post_reactions), list_administered_organizations, and find_organization_by_vanity_name.

list_administered_organizations

List the organizations the connected member administers (org URN, role, state). The entry point for organization selection. Filter to ADMINISTRATOR + APPROVED for usable organizations. Returns HTTP 403 under the current ad-scope access, until Community Management API approval.
string
default:"ADMINISTRATOR"
string
default:"APPROVED"
integer
default:"100"

get_organization

Fetch full admin-visible org profile by id (name, website, industries, locations, logo, staffCountRange). Returns HTTP 403 until Community Management API approval.
string
required

find_organization_by_vanity_name

Resolve an organization by its vanityName (URL slug) to its URN and profile. Returns HTTP 403 under the current ad-scope access, until Community Management API approval.
string
required
The URL slug, e.g. microsoft.

get_organization_follower_count

Total first-degree follower count for an organization (the headline number). Returns HTTP 403 until Community Management API approval.
string
required

list_organization_posts

List organic posts authored by an organization (the page’s content feed), newest first. Returns HTTP 403 until Community Management API approval.
string
required
string
default:"LAST_MODIFIED"
LAST_MODIFIED or CREATED.
integer
default:"100"

get_post

Fetch a single organic post by its share/ugcPost URN (commentary, author, visibility, content). Returns HTTP 403 under the current ad-scope access, until Community Management API approval.
string
required
urn:li:share:123 or urn:li:ugcPost:123.

get_post_social_metadata

Reaction and comment summary for a post (commentsState, commentSummary, reactionSummaries by type). Returns HTTP 403 under the current ad-scope access, until Community Management API approval.
string
required
The post/share/ugcPost URN.

list_post_comments

List comments on a post (or nested replies on a comment). Returns HTTP 403 under the current ad-scope access, until Community Management API approval.
string
required
The post/share/ugcPost URN.
integer
default:"100"

list_post_reactions

List reactions on a post or comment with reactionType (LIKE / PRAISE / EMPATHY / INTEREST / APPRECIATION / ENTERTAINMENT). Returns HTTP 403 under the current ad-scope access, until Community Management API approval.
string
required
The post/share/ugcPost URN.
integer
default:"100"

Member profile

Both member-profile reads use the profile scopes that v1 does not request, so they return HTTP 403 until Community Management API approval. get_my_profile still doubles as a connect-confirmation once those scopes are granted.

get_my_profile

The connected member’s own profile: id (person URN), name, headline, vanityName (public-URL slug), photo. Also useful as a connect-confirmation / whoami check. Returns HTTP 403 until Community Management API approval. No arguments.

get_my_connections_count

The connected member’s number of first-degree connections (count only, not the list). The viewer is implied by the access token. Returns HTTP 403 until Community Management API approval. No arguments.
integer
Number of first-degree connections.

Advanced: query (read escape-hatch)

query

GET any allow-listed LinkedIn REST or v2 path with a safelisted set of read parameters, for the long tail not covered by a dedicated tool. Read-only by construction (GET-only + path and param guard).
string
required
A bare path under /rest or /v2, e.g. /rest/adCampaigns/123 or /v2/me (no scheme, no traversal).
object
Read params as a string/number record. Only safelisted keys are forwarded; others are dropped silently. Percent-encode URN values. Allowed keys include: q, fields, projection, start, count, pageSize, pageToken, search, pivot, pivots, timeGranularity, dateRange, facet, query, urns, entities, ids, owner, account, organization, sort, sortBy, sortOrder, edgeType.
Allow-listed path resources: adAccounts, adAccountUsers, adCampaignGroups, adCampaigns, creatives, adPreviews, adAnalytics, adBudgetPricing, adSupplyForecasts, audienceCounts, adTargetingFacets, adTargetingEntities, conversions, insightTags, insightTagDomains, campaignConversions, leadForms, organizations, organizationAcls, organizationPageStatistics, organizationalEntityFollowerStatistics, organizationalEntityShareStatistics, networkSizes, posts, socialMetadata, socialActions, reactions, me, connections, geo.

Ad-management write tools (11)

All 11 tools go through the guardrail described above. See Handlinger & guardrails for the full model.

Campaign groups

create_campaign_group

Create a campaign group (the budget/status container above campaigns). Created DRAFT by default (no serving); status: "ACTIVE" requires confirm: true.
string
required
string
required
1–100 characters.
integer
required
runSchedule.start (epoch ms).
integer
runSchedule.end (epoch ms; required if totalBudget is set).
string
default:"DRAFT"
DRAFT | ACTIVE | PAUSED | ARCHIVED. ACTIVE requires confirm: true.
string
Total budget as a decimal string (major units).
string
ISO 4217 code; required when a budget amount is provided.
boolean
Set true to apply when confirmation is required.

update_campaign_group

Edit a campaign group’s name, schedule, or total budget. A budget change always requires confirm: true.
string
required
string
required
string
string
string
integer
New runSchedule.end (epoch ms).
boolean

set_campaign_group_status

Set a campaign group to DRAFT / ACTIVE / PAUSED / ARCHIVED. PAUSED stops serving immediately and applies without confirmation. ACTIVE and ARCHIVED require confirm: true.
string
required
string
required
string
required
DRAFT | ACTIVE | PAUSED | ARCHIVED.
boolean

Campaigns

create_campaign

Create a campaign under a group. Created DRAFT by default (no spend). status: "ACTIVE" requires confirm: true. Money is major units.
string
required
string
required
Parent campaign group id.
string
required
string
required
Campaign type, e.g. SPONSORED_UPDATES, TEXT_AD, DYNAMIC.
string
required
Bidding cost type: CPM | CPC | CPV.
string
default:"us"
locale.country (ISO 3166-1 alpha-2).
string
default:"en"
locale.language (ISO 639-1).
string
Daily budget (decimal string). Provide daily OR total.
string
Total budget (decimal string). Provide daily OR total.
string
Required when a budget amount is provided.
string
Bid (unitCost) amount (decimal string).
string
required
targetingCriteria as a JSON object string. Build URNs with the targeting read tools.
string
e.g. WEBSITE_VISITS, LEAD_GENERATION, BRAND_AWARENESS.
string
Required by LinkedIn (2025-08+) on create; set the value appropriate to your account/region.
string
default:"DRAFT"
DRAFT | ACTIVE | PAUSED | ARCHIVED. ACTIVE requires confirm: true.
boolean

update_campaign

Edit a campaign’s name, budgets, bid (unitCost), or targetingCriteria. A budget or bid change always requires confirm: true.
string
required
string
required
string
string
string
string
string
string
New targetingCriteria as a JSON object string.
boolean

set_campaign_status

Set a campaign to DRAFT / ACTIVE / PAUSED / ARCHIVED. PAUSED stops spend immediately (no confirmation needed). ACTIVE and ARCHIVED require confirm: true.
string
required
string
required
string
required
DRAFT | ACTIVE | PAUSED | ARCHIVED.
boolean

Creatives

set_creative_status

Set a creative (ad) to DRAFT / ACTIVE / PAUSED / ARCHIVED. PAUSED is immediate. ACTIVE (starts serving and spending) and ARCHIVED require confirm: true.
string
required
string
required
urn:li:sponsoredCreative:123.
string
required
DRAFT | ACTIVE | PAUSED | ARCHIVED.
boolean

Conversion tracking

create_conversion_rule

Create a conversion rule for an account (measurement setup; does not spend). Returns the new id and the imagePixelTag snippet. Applies without confirm: true by default (measurement only, no spend or publish).
string
required
string
required
string
required
e.g. LEAD, PURCHASE, SIGN_UP, ADD_TO_CART, DOWNLOAD, KEY_PAGE_VIEW.
string
default:"LAST_TOUCH_BY_CAMPAIGN"
LAST_TOUCH_BY_CAMPAIGN | LAST_TOUCH_BY_CONVERSION.
integer
default:"30"
Post-click attribution window (days).
integer
default:"7"
View-through attribution window (days).
string
Optional fixed conversion value (decimal string, major units).
string
Required when valueAmount is provided.
boolean

update_conversion_rule

Edit a conversion rule’s name, enabled state, or value. Editing the value does not retroactively re-attribute past events. Applies without confirm: true.
string
required
string
required
string
boolean
string
string
boolean

associate_campaign_conversion

Attach a conversion rule to a campaign so that campaign attributes that conversion. Use the urn:lla conversion URN form (e.g. urn:lla:llaPartnerConversion:123). Applies without confirm: true.
string
required
string
required
urn:lla:llaPartnerConversion:123 (note the urn:lla namespace).
boolean

remove_campaign_conversion

Detach a conversion rule from a campaign (stops conversion attribution for that campaign). Destructive to reporting and optimization. Requires confirm: true.
string
required
string
required
urn:lla:llaPartnerConversion:123.
boolean

Organic-social write tools (8): requires Community Management API approval

These 8 tools are built and exposed but not yet active. They return HTTP 403 until Consile’s LinkedIn app is approved for the Community Management API. The organic-social read tools (list_organization_posts, get_post, get_post_social_metadata, list_post_comments, list_post_reactions) also return HTTP 403 under the current ad-scope access. The scopes w_organization_social and w_member_social are not requested in v1.
When activated, the same guardrail applies: new posts default to DRAFT lifecycle (not publicly visible), and publishing public content (a published post, a comment, or a reaction) and deleting content require confirm: true.

Posts

create_organization_post

Publish an organic post authored by an organization (Company Page). Defaults to DRAFT lifecycle (not publicly visible); lifecycleState: "PUBLISHED" publishes public content under the brand and requires confirm: true.
string
required
string
required
Post text (supports #hashtags).
string
default:"PUBLIC"
PUBLIC | CONNECTIONS | LOGGED_IN.
string
default:"DRAFT"
DRAFT | PUBLISHED. PUBLISHED requires confirm: true.
boolean

create_member_post

Publish an organic post authored by the connected member (person). Defaults to DRAFT; PUBLISHED posts public content under the member’s name and requires confirm: true. The author is resolved from /v2/me and is never taken from tool input.
string
required
Post text.
string
default:"PUBLIC"
PUBLIC | CONNECTIONS | LOGGED_IN.
string
default:"DRAFT"
DRAFT | PUBLISHED. PUBLISHED requires confirm: true.
boolean

update_post

Edit a post’s commentary or lifecycleState. Editing the text of a (possibly public) post, or publishing a DRAFT (lifecycleState: "PUBLISHED"), mutates public content and requires confirm: true.
string
required
urn:li:share:123 or urn:li:ugcPost:123.
string
string
DRAFT | PUBLISHED.
boolean

delete_post

Permanently delete a post. Irreversible removal of (possibly public) content. Requires confirm: true.
string
required
urn:li:share:123 or urn:li:ugcPost:123.
boolean

Comments & reactions

create_comment

Post a public comment on a post, as the organization (pass organizationId) or the connected member. Public content under the brand or member identity. Requires confirm: true.
string
required
The post/share/ugcPost URN to comment on.
string
required
The comment text.
string
Comment AS this organization; omit to comment as the connected member.
boolean

delete_comment

Delete a comment on a post (your own, or moderating others’ comments on your post), as the organization or the connected member. Destructive. Requires confirm: true.
string
required
The post/share/ugcPost URN the comment is on.
string
required
The comment id (numeric id or full comment URN).
string
Acting AS this organization; omit to act as the connected member.
boolean

create_reaction

React (LIKE / PRAISE / EMPATHY / INTEREST / APPRECIATION / ENTERTAINMENT) to a post, as the organization or the connected member. A public brand or member action. Requires confirm: true.
string
required
The post/share/ugcPost URN to react to.
string
default:"LIKE"
LIKE | PRAISE | EMPATHY | INTEREST | APPRECIATION | ENTERTAINMENT.
string
React AS this organization; omit to react as the connected member.
boolean

delete_reaction

Remove a reaction previously made (as the organization or the connected member) from a post. Low-stakes cleanup. Applies without confirm: true.
string
required
The post/share/ugcPost URN the reaction is on.
string
The reaction’s actor was this organization; omit for the connected member.
boolean

Code examples

The token is refreshed transparently on the read path. A revoked token (or one LinkedIn otherwise rejects) surfaces as HTTP 401 / AccessTokenExpiredError; re-authorize in the portal. See Errors & limits.