Free Tool

LinkedIn API Error Codes Decoder

Paste the status and body of a failed call and get the cause and the fix for the LinkedIn API error codes that stop posts: 400, 401, 403, 426, 429 and 5xx. It also checks your Linkedin-Version header against LinkedIn's sunset dates.

The short answer

LinkedIn API errors are an HTTP status plus a code in the JSON body. Most posting failures are 426 NONEXISTENT_VERSION (a sunset Linkedin-Version header), 401 (missing or expired token), 403 ACCESS_DENIED (no w_member_social scope or no page role) and 429 (daily limit, resets at midnight UTC).

Try an example:

Runs in your browser. Nothing is sent anywhere. Redact your access token before pasting.

The cause, whether a retry will help, and the fix appear here. Load an example above to see one.

LinkedIn API Version Checker

Enter the value of your Linkedin-Version header to see whether it is active, sunsetting within 60 days, or already sunset. The newest version in LinkedIn's table is 202609 (September 2026). OpenTweet currently sends 202608.

The status, sunset date and days left appear here.

Versions and sunset dates

Linkedin-VersionReleaseSunset date
202609September 2026September 15, 2027
202608August 2026August 17, 2027
202607July 2026July 15, 2027
202606June 2026June 15, 2027
202605May 2026May 15, 2027
202604April 2026April 15, 2027
202603March 2026March 16, 2027
202602February 2026February 15, 2027
202601January 2026January 15, 2027
202511November 2025November 16, 2026
202510October 2025October 15, 2026
202509September 2025September 15, 2026
202508August 2025August 17, 2026
202507July 2025July 15, 2026
202506June 2025June 15, 2026
202505May 2025May 15, 2026
202504April 2025April 15, 2026
202503March 2025March 16, 2026
202502February 2025February 16, 2026
202501January 2025January 15, 2026

Copied from LinkedIn's API migration status table on October 10, 2026. The table has no 202412 or 202512 row. Every version before 202501 is sunset.

LinkedIn API error codes reference

From LinkedIn's Posts API error table and its error responses page, which documents VERSION_MISSING and NONEXISTENT_VERSION.

StatusCodeUsual causeRetry?
400VERSION_MISSINGNo Linkedin-Version header on the request.Fix first
400INVALID_URN_TYPEWrong kind of URN in author or content.media.id.Fix first
400INVALID_URN_IDA URN id LinkedIn cannot parse.Fix first
400MISSING_FIELDauthor, visibility, distribution or lifecycleState is missing.Fix first
400INVALID_VALUE_FOR_FIELDAn enum value LinkedIn does not accept.Fix first
400FIELD_LENGTH_TOO_LONGcommentary or another text field is too long.Fix first
400INVALID_VALUE_BLANK_FIELDA required string is empty.Fix first
401EMPTY_ACCESS_TOKENNo token in the Authorization header. Other 401s usually mean an expired token.New token
403ACCESS_DENIEDMissing scope such as w_member_social, or no role on the Company Page.Fix first
404NOT_FOUNDThe post URN is wrong or not URL encoded.Fix first
409CONFLICTA write conflict.Retry
422UNPROCESSABLE_ENTITYWell-formed request, values that do not fit together.Fix first
426NONEXISTENT_VERSIONThe Linkedin-Version is sunset or not in LinkedIn's version table.Fix first
429TOO_MANY_REQUESTSDaily limit per app or per member hit. Resets at midnight UTC.Retry after reset
500INTERNAL_SERVER_ERRORA LinkedIn server error.Retry
503SERVICE_UNAVAILABLELinkedIn is temporarily unavailable.Retry

The headers every call needs

A post to your own profile with a self-serve app needs the w_member_social scope and these three headers. The author is urn:li:person: followed by the sub value from the OpenID Connect userinfo endpoint.

bash
curl -X POST 'https://api.linkedin.com/rest/posts' \
  -H 'Authorization: Bearer YOUR_ACCESS_TOKEN' \
  -H 'Linkedin-Version: 202609' \
  -H 'X-Restli-Protocol-Version: 2.0.0' \
  -H 'Content-Type: application/json' \
  --data '{
    "author": "urn:li:person:YOUR_SUB",
    "commentary": "Hello from the Posts API",
    "visibility": "PUBLIC",
    "distribution": {
      "feedDistribution": "MAIN_FEED",
      "targetEntities": [],
      "thirdPartyDistributionChannels": []
    },
    "lifecycleState": "PUBLISHED",
    "isReshareDisabledByAuthor": false
  }'

Commentary is not plain text

Characters such as ( ) [ ] { } @ # and * are markup in LinkedIn's commentary field. Unescaped, they can cut the post off. See why a LinkedIn API post is cut off at a parenthesis.

A successful create returns 201 with the post URN in the x-restli-id response header. For a full walkthrough with token handling and image upload, see how to post to LinkedIn with the API in Python.

Skip the version bumps and token renewals

OpenTweet sets the Linkedin-Version and Rest.li headers, uploads images with the right owner, separates errors worth retrying from ones that need a fix, and tells you when the 60-day LinkedIn sign-in needs a reconnect. You make one call.

bash
curl -X POST https://opentweet.io/api/v1/posts \
  -H "Authorization: Bearer ot_your_key" \
  -H "Content-Type: application/json" \
  -d '{
    "text": "Shipping notes for this week.",
    "platforms": ["linkedin"],
    "publish_now": true
  }'

OpenTweet posts to your LinkedIn personal profile. Add "x" and "bluesky" to platforms to send the same post there too.

7-day free trial, then from $11.99/mo. LinkedIn, X and Bluesky on every plan.

LinkedIn API Errors FAQ

What are the most common LinkedIn API error codes?

For posting, four cover most failures: 426 NONEXISTENT_VERSION when the Linkedin-Version header is sunset, 401 when the access token is missing or expired, 403 ACCESS_DENIED when the token lacks w_member_social or the member has no role on the Company Page, and 429 when a daily rate limit is hit. The 400 codes name the field that is wrong.

What does LinkedIn API error 426 mean?

426 NONEXISTENT_VERSION means the Linkedin-Version header names a version LinkedIn does not serve: it was sunset, or it is not in LinkedIn's version table at all. Change the header to an active YYYYMM version. 202609 is the newest in LinkedIn's table as of October 10, 2026.

What is the current LinkedIn API version?

LinkedIn releases a version every month and supports each for at least a year. The newest in LinkedIn's version table on October 10, 2026 was 202609. Any version that has not reached its sunset date works; OpenTweet sends 202608.

Which headers does every LinkedIn API call need?

Three: Authorization: Bearer with the member access token, Linkedin-Version with a YYYYMM version, and X-Restli-Protocol-Version: 2.0.0. Without the version header LinkedIn returns 400 VERSION_MISSING, because it never applies the latest version by default.

Why do I get 403 ACCESS_DENIED when posting to LinkedIn?

Posting to your own profile needs the w_member_social scope in the token, and the author must be urn:li:person for the member who signed in. Posting as a Company Page needs w_organization_social and an ADMINISTRATOR, DIRECT_SPONSORED_CONTENT_POSTER or CONTENT_ADMIN role on that page. Also check the Linkedin-Version header is current.

When do LinkedIn API rate limits reset?

At midnight UTC. LinkedIn sets daily limits per application and per member, does not publish the standard numbers, and shows your usage for endpoints called today in the app's Analytics tab in the Developer Portal.

Does this tool send my token or response anywhere?

No. Decoding and the version check run in your browser and make no network calls. Redact your access token before pasting headers anyway.

Can I post to LinkedIn without handling these errors myself?

Yes. With OpenTweet you send one POST to /api/v1/posts with "platforms": ["linkedin"]. OpenTweet sets the version and Rest.li headers, uploads images, and tells you when the 60-day LinkedIn sign-in needs a reconnect. Plans start at $11.99/month with a 7-day free trial.