LinkedIn API version 202510 sunsets Oct 15, 2026: what to change
LinkedIn Marketing version 202510 is sunset on October 15, 2026. Pin Linkedin-Version 202609 and add a check so a stale pin fails in CI, not in production.

If your LinkedIn video publisher sends Linkedin-Version: 202510, it stops working after October 15, 2026. The fix is a one-line header change to a newer YYYYMM value, currently 202609, plus a guard so the pin cannot go stale again. Sume does not call LinkedIn for you: Sume makes the MP4, and your own publisher does the upload with the header below.
What LinkedIn says
LinkedIn publishes a new Marketing API version every month and supports each for a minimum of one year. A call without the header returns an error, and so does a call with a deprecated value. The latest version is never applied by default.
| Fact | Value on the page |
|---|---|
| Sunset notice | Marketing version 202510 sunsets on October 15, 2026 |
| Latest version | September 2026, header 202609 |
| Header | Linkedin-Version: YYYYMM |
| Support window | Minimum one year per version |
| Missing or deprecated header | Error response |
| Default version | None: every call must name one |
Step 1: move the pin to configuration
Keep the version in one environment variable so a migration is a deploy setting, not a code change. Send it on every request, including the ones that register a video upload.
Step 2: fail CI before LinkedIn fails you
This check reads the pin and fails when it is older than ten months. Ten months is our own safety margin inside the one-year minimum, not a LinkedIn rule.
import os, sys
from datetime import date
pin = os.environ.get("LINKEDIN_VERSION", "")
if len(pin) != 6 or not pin.isdigit():
sys.exit("LINKEDIN_VERSION must look like 202609")
today = date.today()
age = (today.year - int(pin[:4])) * 12 + today.month - int(pin[4:])
if age > 10:
sys.exit(f"LinkedIn version {pin} is {age} months old: migrate")
print(f"ok: {pin} is {age} months old")
Step 3: keep file production separate
Re-render nothing when you change the header. If a clip needs to meet a length limit, cut it once with the video trim endpoint ($0.02 per job, start plus end or duration) and store the returned MP4 URL. The version bump then only touches your upload code.
Limits
This post covers the header and sunset date only. Field-level changes between 202510 and 202609 are listed in LinkedIn's own per-version changelog, which we did not review here. Test the new version against a non-production account before the cutover, and read the migration notes for each resource you call.
Sources
Related posts
More in Developers
- LinkedIn Videos API: 4 MB parts, ETags and finalizeUpload
LinkedIn video upload is initializeUpload, PUT each 4 MB part, collect the ETags, then finalizeUpload. A part splitter and the order rules that break uploads.
- List Seedance and Kling ids, lengths and inputs from one API call
Read GET /v1/videos/models in Python to see every Seedance and Kling id, its durations and inputs, and exit non-zero when a kling-4 id appears.
- Localize on-screen text per language: Python caption fan-out
Burn one set of translated cues per language onto a clean clip with Sume: one job each, its own key, asyncio fan-out, $0.20 a job. A runnable script.
- Log these six fields for every Sume image call
Job id, request id, idempotency key, model, quality, and metadata. A short logging helper that lets you recover, dedupe, and report an image failure later.
Written by Sume