Syndroodocs
WebsiteGitHubOverview

LinkedIn

Overview

Provider id linkedin. The provider publishes one member post to POST https://api.linkedin.com/rest/posts with the required LinkedIn-Version header. Organization posts are not implemented: only member is accepted as the author selection.

Requirements

  • A LinkedIn developer app with a client id and client secret.
  • A registered redirect URI for the authorization step.
  • Member authorization for posting. The documented scope for posting on behalf of a member is w_member_social.

Credentials

FieldMeaningSecret
client_idThe app's client id.No
client_secretThe app's client secret.Yes

The posting author is urn:li:person:{id}, and the member id is resolved through GET /v2/me, which LinkedIn documents as deprecated. GET /v2/userinfo is deliberately not used for the author: its sub is unique per app, not a stable global member id. When the member id cannot be read, the connection fails closed instead of guessing.

Connect

redirectUri is required; the client id, client secret and scope list can be supplied as connect options by a machine caller.

{
  "type": "start",
  "provider": "linkedin",
  "options": {
    "redirectUri": "https://example.com/oauth/callback/linkedin",
    "scopes": ["w_member_social", "openid", "profile"]
  }
}
syndroo connect --input connect.json --json

UNRESOLVED. PKCE is not documented on the token endpoint that was read, and the provider never adds a code_challenge for that reason. The start step returns an authorization action that the local CLI completes itself, with --redirect-uri and a controlling terminal or with --callback-url -, as the credential reference describes. That local callback path is fixture-tested against local servers only; no live LinkedIn account was connected.

First publish

{
  "type": "prepare",
  "content": {},
  "targets": [
    {
      "provider": "linkedin",
      "options": { "commentary": "Hello from Syndroo.", "visibility": "PUBLIC" }
    }
  ]
}
syndroo publish --input post.json --json

Success is an HTTP 201 whose response header carries the created post URN. That header only arrives with the response, so a timeout after the post was created leaves the outcome unknown and non-retryable.

Capabilities

The manifest declares text, published as a member post with lifecycleState: PUBLISHED. UNRESOLVED. The maximum commentary length is not documented on the retrieved page, so no character limit is printed here or enforced by the provider.

Options

WhereAccepted keys
Connect optionsredirectUri (required), clientId, clientSecret, scopes.
Publish optionscommentary and visibility (both required), author (member only), distribution, linkedinVersion.
ContentNone required; LinkedIn sends the target options.

UNRESOLVED. linkedinVersion is pinned to 202601 in the provider's manifest and is the only accepted value. LinkedIn versions this header by month, so treat that constant as awaiting re-verification against the current API version rather than as a recommendation.

Troubleshooting

The provider never retries and reports a failure only when the failure is known not to have been applied. A rejected or already-used authorization code is reported as a callback rejection rather than retried. UNRESOLVED. LinkedIn's error response format was not confirmed on a primary page, so this guide does not describe one.

Revoke and security

UNRESOLVED. No official permission-removal or token-revocation procedure was retrieved, so this guide does not print a revoke URL. Remove the app's access from your LinkedIn settings, then disconnect the local connection:

syndroo connect --disconnect <connectionId>