API reference
Eight surfaces, one envelope. Every endpoint, typed and runnable in-page.
LinkFetch exposes a small, stable REST surface. Every endpoint is also available as a typed MCP tool, and every endpoint card below is generated from the same catalog that powers the in-app playground — there is exactly one place where endpoint metadata lives, so prose and runtime never drift.
Common base
Base URL: https://api.linkfetch.io
Auth: Authorization: Bearer sk_live_...
Format: application/json (request + response)Path conventions:
:slug— public LinkedIn vanity (the tail of/in/<slug>or/company/<slug>). Always lowercase.:id— numeric LinkedIn ID (job id, group id, activity id, etc.).:activityId— the integer in/feed/update/urn:li:activity:<id>/.?url=— convenience: pass any LinkedIn URL and we extract the id.
Surfaces
- § profiles3 endpoints
Profiles — The person, the whole résumé.
Resolve a public LinkedIn profile URL or vanity slug to a typed person record — name, headline, roles, education, skills, certifications, and recent activity. Cache-first: if the row isn't stored yet, a 422 tells the LinkFetch Chrome extension to capture it from the user's own signed-in session. No fake accounts, no rented sessions.
- § companies4 endpoints
Companies — Size, funding, headcount trend.
Resolve a company slug or numeric ID to a structured company record — industry, headcount band, locations, follower count. Pair with the employees endpoint for ICP company-list expansion.
- § jobs3 endpoints
Jobs — Our scraped LinkedIn jobs dataset.
Filter our self-hosted LinkedIn jobs dataset by keyword, geo, company, salary, level, and date. Every record carries a posted_at timestamp and a first-seen window so you can build hiring signals — not just a job board mirror. No extension needed; just an API key.
- § posts2 endpoints
Posts — Single posts with reactions and counts.
Fetch a specific LinkedIn post by activity ID — body, author, ugcPost URN, reaction breakdown by type, and view counts where LinkedIn exposes them. Then enumerate the reactors for warm-list building or distribution analytics.
- § groups2 endpoints
Groups — Niche communities inside LinkedIn.
Resolve LinkedIn groups by numeric ID and paginate their visible members. Useful for niche-community ICP discovery and for SaaS communities that live inside LinkedIn rather than Slack or Discord.
- § search4 endpoints
Search — Faceted discovery across the graph.
One search surface, four facets: people, companies, groups, posts. Every result carries the same provenance stamp as the underlying profile, company, group, or post — so a search is an ICP query, not a scrape.
- § locations1 endpoints
Locations — Resolve to LinkedIn geo IDs.
Most LinkedIn filters use opaque numeric geo IDs, not free-text city names. The locations endpoint resolves a search string to the canonical geo ID you need to pass into people, jobs, and company search.
- § outbound12 endpoints
Outbound — Act on the graph, with consent.
Send connection requests, messages, reactions, comments, follows, and saves through the user's own LinkedIn session. Every action runs in the LinkFetch Chrome extension on a signed-in tab — throttled, queued, and logged. Strangers' DMs are explicitly blocked: the extension verifies a 1st-degree connection before sending.
- § messaging5 endpoints
Messaging — Read your inbox, reply into existing threads.
List your conversations, read message history, reply into a thread, and mark mailbox state — all on the user's own LinkedIn session via the extension. No server-side cache: messaging content is per-user private (per LinkFetch_Data_*.md), so each call talks to LinkedIn through the signed-in tab and returns the raw voyager response. Reply uses the captured 'Variant C' body shape (conversationUrn-routed, no hostRecipientUrns) — see LinkedIn_ReverseEngineered/samples/messaging/.
Response envelope
{
"data": { /* the typed record(s) for this surface */ },
"meta": {
"request_id": "req_01HZ...",
"credits_charged": 5,
"rate_limit": { "remaining": 4995, "reset_at": "..." },
"provenance": {
"source": "extension",
"fetched_at": "2026-04-23T10:14:22Z",
"freshness_days": 0
}
}
}Errors use the same envelope with a top-level error object — see
Errors. Empty result sets return data: [] and are
never charged.