返回 Skill 列表
extension
分类: 开发与工程需要 API Key

LinkdAPI

完整的LinkdAPI集成OpenClaw技能,涵盖50+个端点、Python/Node.js/Go SDK、身份验证、速率限制及真实示例。

person作者: ethcipherhubclawhub

LinkdAPI Skill — LinkedIn Data API

Use this skill to access LinkedIn professional data via the LinkdAPI REST API.

Full endpoint reference with params, enums, and response schemas → references/api-ref.md Structured endpoint manifest (JSON) → references/skills.json


⚠️ Authentication — READ FIRST

| | Value | |---|---| | Auth header | X-linkdapi-apikey | | Base URL | https://linkdapi.com | | Env var | LINKDAPI_KEY |

curl -s -H "X-linkdapi-apikey: $LINKDAPI_KEY" \
  "https://linkdapi.com/api/v1/profile/overview?username=ryanroslansky" | jq .

NEVER use x-api-key or Authorization: Bearer — they will return 401. The only correct header is X-linkdapi-apikey.


Core Concepts

| Term | Meaning | How to Get | |---|---|---| | username | LinkedIn vanity slug (linkedin.com/in/USERNAME) | From the URL | | urn | Internal LinkedIn ID (ACoAAAA...) | From profile/overview response | | id (company) | Numeric LinkedIn company ID | From companies/company/info or companies/name-lookup | | jobId | Numeric LinkedIn job ID | From job search results | | geoUrn | Location filter ID | From geos/name-lookup | | cursor | Pagination token | From previous response |

Always get URN first when working with profile endpoints that require it.


Endpoint Quick Reference

Profile — /api/v1/profile/

| Endpoint | Params | Use | |---|---|---| | overview | username | Basic info + URN ← start here | | details | urn | Positions, education, languages | | contact-info | username | Email, phone, websites | | about | urn | About section | | full | username or urn | Everything in 1 request | | full-experience | urn | Complete work history | | certifications | urn | Certifications | | education | urn | Education history | | skills | urn | Skills + endorsements | | social-matrix | username | Followers + connections | | recommendations | urn | Given + received | | similar | urn | Similar profiles | | reactions | urn, cursor | Profile reactions | | interests | urn | Interests | | services | urn | Services offered | | username-to-urn | username | Username → URN |

Companies — /api/v1/companies/

| Endpoint | Params | Use | |---|---|---| | name-lookup | query | Search by name | | company/info | id or name | Company details | | company/info-v2 | id | Extended info | | company/similar | id | Similar companies | | company/employees-data | id | Headcount + distribution | | company/affiliated-pages | id | Subsidiaries | | company/posts | id, start | Company posts | | company/universal-name-to-id | universalName | Universal name → ID | | jobs | companyIDs, start | Job listings |

Jobs — /api/v1/jobs/

| Endpoint | Params | Use | |---|---|---| | search | keyword, location, timePosted, workArrangement, geoId, companyIds, jobTypes, experience, salary, start | V1 job search | | job/details | jobId | Job info (open only) | | job/details-v2 | jobId | Job info (all statuses) | | job/similar | jobId | Similar jobs | | job/people-also-viewed | jobId | Related jobs | | job/hiring-team | jobId, start | Hiring team | | posted-by-profile | profileUrn, start, count | Jobs by a person |

Search — /api/v1/search/

| Endpoint | Key Params | Use | |---|---|---| | people | keyword, title, currentCompany, geoUrn, industry, firstName, lastName, start, count | Find professionals | | companies | keyword, geoUrn, companySize, hasJobs, industry, start, count | Find companies | | posts | keyword, sortBy, datePosted, authorJobTitle, fromOrganization, contentType, start | Find posts | | jobs | keyword, workplaceTypes, datePosted, easyApply, companies, locations, experience, salary, under10Applicants, start, count | V2 job search | | services | keyword, geoUrn, serviceCategory, profileLanguage, start, count | Service providers | | schools | keyword, start, count | Schools |

Posts — /api/v1/posts/

| Endpoint | Params | Use | |---|---|---| | featured | urn | Featured posts | | all | urn, cursor, start | All posts paginated | | info | urn | Single post | | comments | urn, start, count, cursor | Comments | | likes | urn, start | Likes |

Comments — /api/v1/comments/

| Endpoint | Params | Use | |---|---|---| | all | urn, cursor | All comments | | likes | urn, start | Comment likes |

Articles — /api/v1/articles/

| Endpoint | Params | Use | |---|---|---| | all | urn, start | All articles | | article/info | url | Article details | | article/reactions | urn, start | Reactions |

Lookups

| Path | Params | Use | |---|---|---| | /api/v1/geos/name-lookup | query | → geoUrn for location filters | | /api/v1/g/title-skills-lookup | query | → skill/title IDs | | /api/v1/g/services-lookup | query | → service category IDs |

Services — /api/v1/services/

| Endpoint | Params | Use | |---|---|---| | service/details | vanityname | Service page | | service/similar | vanityname | Similar services |

System

| Path | Use | |---|---| | status/ | Health check (no auth) |


Common Workflows

Lead Enrichment (Profile Research)

# Step 1: Get URN
PROFILE=$(curl -s -H "X-linkdapi-apikey: $LINKDAPI_KEY" \
  "https://linkdapi.com/api/v1/profile/overview?username=TARGET_USERNAME")
URN=$(echo $PROFILE | jq -r '.data.urn')
echo "$(echo $PROFILE | jq -r '.data.fullName')$URN"

# Step 2: Enrich in parallel
curl -s -H "X-linkdapi-apikey: $LINKDAPI_KEY" \
  "https://linkdapi.com/api/v1/profile/full-experience?urn=$URN" | jq '.data.experience[0]' &
curl -s -H "X-linkdapi-apikey: $LINKDAPI_KEY" \
  "https://linkdapi.com/api/v1/profile/skills?urn=$URN" | jq '.data.skills[:5]' &
curl -s -H "X-linkdapi-apikey: $LINKDAPI_KEY" \
  "https://linkdapi.com/api/v1/profile/contact-info?username=TARGET_USERNAME" | jq '.data' &
wait

# Or use full endpoint (one request, more credits)
curl -s -H "X-linkdapi-apikey: $LINKDAPI_KEY" \
  "https://linkdapi.com/api/v1/profile/full?username=TARGET_USERNAME" | jq .data

Company Research

CO_ID=$(curl -s -H "X-linkdapi-apikey: $LINKDAPI_KEY" \
  "https://linkdapi.com/api/v1/companies/company/info?name=google" | jq -r '.data.id')

curl -s -H "X-linkdapi-apikey: $LINKDAPI_KEY" \
  "https://linkdapi.com/api/v1/companies/company/employees-data?id=$CO_ID" | jq .data &
curl -s -H "X-linkdapi-apikey: $LINKDAPI_KEY" \
  "https://linkdapi.com/api/v1/companies/company/similar?id=$CO_ID" | jq .data &
curl -s -H "X-linkdapi-apikey: $LINKDAPI_KEY" \
  "https://linkdapi.com/api/v1/companies/jobs?companyIDs=$CO_ID&start=0" | jq .data &
wait

ICP People Search

GEO_URN=$(curl -s -H "X-linkdapi-apikey: $LINKDAPI_KEY" \
  "https://linkdapi.com/api/v1/geos/name-lookup?query=San+Francisco" | jq -r '.data[0].urn')

curl -s -H "X-linkdapi-apikey: $LINKDAPI_KEY" \
  "https://linkdapi.com/api/v1/search/people?keyword=VP+Sales&title=VP+Sales&geoUrn=$GEO_URN&start=0" \
  | jq '.data.items'

Job Market Intel

# V2 (richest filters)
curl -s -H "X-linkdapi-apikey: $LINKDAPI_KEY" \
  "https://linkdapi.com/api/v1/search/jobs?keyword=Software+Engineer&workplaceTypes=remote&datePosted=1week&easyApply=true" \
  | jq .data

# V1 (classic, location string)
curl -s -H "X-linkdapi-apikey: $LINKDAPI_KEY" \
  "https://linkdapi.com/api/v1/jobs/search?keyword=Marketing+Manager&location=London&timePosted=1week&workArrangement=hybrid" \
  | jq .data

Content Research

# Posts by a profile
curl -s -H "X-linkdapi-apikey: $LINKDAPI_KEY" \
  "https://linkdapi.com/api/v1/posts/all?urn=$URN&start=0" | jq .data

# Search posts by keyword
curl -s -H "X-linkdapi-apikey: $LINKDAPI_KEY" \
  "https://linkdapi.com/api/v1/search/posts?keyword=AI+marketing&sortBy=date_posted&datePosted=past-week" \
  | jq .data

# Articles
curl -s -H "X-linkdapi-apikey: $LINKDAPI_KEY" \
  "https://linkdapi.com/api/v1/articles/all?urn=$URN&start=0" | jq .data

Error Handling

All responses: { "success": bool, "statusCode": int, "message": string, "errors": null|string, "data": ... }

RESULT=$(curl -s -H "X-linkdapi-apikey: $LINKDAPI_KEY" \
  "https://linkdapi.com/api/v1/profile/overview?username=someuser")

if echo $RESULT | jq -e '.success == true' > /dev/null 2>&1; then
  echo "OK: $(echo $RESULT | jq -r '.data.fullName')"
else
  CODE=$(echo $RESULT | jq -r '.statusCode')
  MSG=$(echo $RESULT | jq -r '.message')
  echo "Error $CODE: $MSG"
  # 401=invalid key | 404=not found | 429=rate limited (retry with backoff) | 500=server error
  [ "$CODE" = "429" ] && sleep 5 && echo "Retry after backoff"
fi

B2B Marketing Playbook

| Goal | Endpoints | |---|---| | Lead enrichment | profile/overviewprofile/full-experience + profile/skills + profile/contact-info | | ICP targeting | geos/name-lookupsearch/people with title + currentCompany + geoUrn | | Competitor intel | companies/company/posts or search/posts?fromOrganization=ID | | Hiring signals | companies/jobs?companyIDs=ID reveals growth areas | | Content inspiration | posts/all on top voices + posts/info for engagement stats | | Warm outreach prep | profile/recommendations + posts/all before messaging | | Job trigger events | jobs/posted-by-profile to find who is hiring actively |


Reference Files

  • references/api-ref.md — Full parameter schemas, all enums, and response field descriptions for every endpoint. Read this when you need exact param names or response field shapes.
  • references/skills.json — Machine-readable manifest of all endpoints (for dynamic tooling or integrations).