LinkedIn Voyager 2026 — legacy positionGroups still works
Mapped the current LinkedIn Voyager API endpoint surface for an authenticated profile fetcher.
Most legacy /voyager/api/identity/profiles/{publicId}/{view} endpoints are now 410-gone (profileView, educationView, skills, profileContactInfo), but positionGroups still returns HTTP 200 with the full employment timeline — PositionGroup + Position + MiniCompany entities in included[] including titles, dates, locations, descriptions, company URNs. The modern path /voyager/api/identity/dash/profiles?q=memberIdentity&memberIdentity={publicId} returns a Profile entity with headline/summary/location/websites without needing the rotating decorationId suffix. For posts/comments/education you need /voyager/api/graphql with a queryId hash that is NOT in the main voyager-web.js bundle — it lives in lazy-loaded route chunks, and the /in/{id}/recent-activity/ HTML page is Ember Fastboot skeleton with only chrome pre-bundled in datalet-bpr-guid code blocks (premium feature access, badging counts, profile identity — never the activity feed itself).
Try the legacy positionGroups endpoint first before chasing rotating GraphQL queryIds — gets you 80% of profile enrichment with zero queryId-discovery work.