Skill flagged — suspicious patterns detected

ClawHub Security flagged this skill as suspicious. Review the scan results before using.

LinkdAPI

Complete LinkdAPI integration OpenClaw skill. Includes all 50+ endpoints, Python/Node.js/Go SDKs, authentication, rate limits, and real-world examples. Use t...

MIT-0 · Free to use, modify, and redistribute. No attribution required.
0 · 119 · 0 current installs · 0 all-time installs
byLinkdAPI@ethcipher
MIT-0
Security Scan
VirusTotalVirusTotal
Benign
View report →
OpenClawOpenClaw
Suspicious
medium confidence
!
Purpose & Capability
The skill's name/description promise 'Python/Node.js/Go SDKs, authentication' yet the package contains no code files or SDKs (instruction-only). The SKILL.md documents an API key (LINKDAPI_KEY) and a third-party base URL (https://linkdapi.com), but the registry metadata lists no required env vars or primary credential and there is no homepage/source URL — these are incoherent.
Instruction Scope
SKILL.md contains detailed, scoped instructions for calling LinkdAPI endpoints and an explicit example using LINKDAPI_KEY; it does not ask the agent to read unrelated local files or exfiltrate data to unknown endpoints. However it instructs the agent to 'Always use this skill for ANY LinkedIn data task', which is a broad directive that may cause the agent to overuse the skill autonomously.
Install Mechanism
There is no install spec and no code is written to disk (instruction-only), which minimizes install-time risk. The references are local docs only.
!
Credentials
The SKILL.md clearly requires an API key via LINKDAPI_KEY and specifies the auth header X-linkdapi-apikey, but the registry metadata did not declare any required env vars or a primary credential. That mismatch is a red flag (the skill expects a secret but doesn't declare it), and the owner/source/homepage are missing which makes it harder to validate the credential recipient.
Persistence & Privilege
The skill does not request 'always: true' and uses default agent-invocation behavior. It does not attempt to modify other skills or system-wide config in the provided content.
What to consider before installing
This package is inconsistent: its docs require an API key (LINKDAPI_KEY) and claim included SDKs, but the distributed bundle provides only documentation (no SDKs) and the registry metadata doesn't list the API key or a homepage. Before installing: 1) Verify the publisher and the linkdapi.com service independently (do not trust only these files). 2) Do not paste your LINKDAPI_KEY (or any secret) into the agent until you confirm the skill's source and that the registry metadata has been corrected to declare the env var/primary credential. 3) Ask the publisher to either include the SDK code or remove the SDK claim, and update the registry to declare LINKDAPI_KEY as required/primary credential. 4) Consider privacy/ToS risk: LinkdAPI appears to scrape LinkedIn data (emails/phones may be returned) — ensure you are allowed to use such data. If you can't verify the publisher or the missing metadata is not fixed, avoid installing or supplying credentials.

Like a lobster shell, security has layers — review code before you run it.

Current versionv1.0.0
Download zip
latestvk97bnh2n2qb793bjcwjnwme1jd82p8z9

License

MIT-0
Free to use, modify, and redistribute. No attribution required.

SKILL.md

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 headerX-linkdapi-apikey
Base URLhttps://linkdapi.com
Env varLINKDAPI_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

TermMeaningHow to Get
usernameLinkedIn vanity slug (linkedin.com/in/USERNAME)From the URL
urnInternal LinkedIn ID (ACoAAAA...)From profile/overview response
id (company)Numeric LinkedIn company IDFrom companies/company/info or companies/name-lookup
jobIdNumeric LinkedIn job IDFrom job search results
geoUrnLocation filter IDFrom geos/name-lookup
cursorPagination tokenFrom previous response

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


Endpoint Quick Reference

Profile — /api/v1/profile/

EndpointParamsUse
overviewusernameBasic info + URN ← start here
detailsurnPositions, education, languages
contact-infousernameEmail, phone, websites
abouturnAbout section
fullusername or urnEverything in 1 request
full-experienceurnComplete work history
certificationsurnCertifications
educationurnEducation history
skillsurnSkills + endorsements
social-matrixusernameFollowers + connections
recommendationsurnGiven + received
similarurnSimilar profiles
reactionsurn, cursorProfile reactions
interestsurnInterests
servicesurnServices offered
username-to-urnusernameUsername → URN

Companies — /api/v1/companies/

EndpointParamsUse
name-lookupquerySearch by name
company/infoid or nameCompany details
company/info-v2idExtended info
company/similaridSimilar companies
company/employees-dataidHeadcount + distribution
company/affiliated-pagesidSubsidiaries
company/postsid, startCompany posts
company/universal-name-to-iduniversalNameUniversal name → ID
jobscompanyIDs, startJob listings

Jobs — /api/v1/jobs/

EndpointParamsUse
searchkeyword, location, timePosted, workArrangement, geoId, companyIds, jobTypes, experience, salary, startV1 job search
job/detailsjobIdJob info (open only)
job/details-v2jobIdJob info (all statuses)
job/similarjobIdSimilar jobs
job/people-also-viewedjobIdRelated jobs
job/hiring-teamjobId, startHiring team
posted-by-profileprofileUrn, start, countJobs by a person

Search — /api/v1/search/

EndpointKey ParamsUse
peoplekeyword, title, currentCompany, geoUrn, industry, firstName, lastName, start, countFind professionals
companieskeyword, geoUrn, companySize, hasJobs, industry, start, countFind companies
postskeyword, sortBy, datePosted, authorJobTitle, fromOrganization, contentType, startFind posts
jobskeyword, workplaceTypes, datePosted, easyApply, companies, locations, experience, salary, under10Applicants, start, countV2 job search
serviceskeyword, geoUrn, serviceCategory, profileLanguage, start, countService providers
schoolskeyword, start, countSchools

Posts — /api/v1/posts/

EndpointParamsUse
featuredurnFeatured posts
allurn, cursor, startAll posts paginated
infournSingle post
commentsurn, start, count, cursorComments
likesurn, startLikes

Comments — /api/v1/comments/

EndpointParamsUse
allurn, cursorAll comments
likesurn, startComment likes

Articles — /api/v1/articles/

EndpointParamsUse
allurn, startAll articles
article/infourlArticle details
article/reactionsurn, startReactions

Lookups

PathParamsUse
/api/v1/geos/name-lookupquery→ geoUrn for location filters
/api/v1/g/title-skills-lookupquery→ skill/title IDs
/api/v1/g/services-lookupquery→ service category IDs

Services — /api/v1/services/

EndpointParamsUse
service/detailsvanitynameService page
service/similarvanitynameSimilar services

System

PathUse
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

GoalEndpoints
Lead enrichmentprofile/overviewprofile/full-experience + profile/skills + profile/contact-info
ICP targetinggeos/name-lookupsearch/people with title + currentCompany + geoUrn
Competitor intelcompanies/company/posts or search/posts?fromOrganization=ID
Hiring signalscompanies/jobs?companyIDs=ID reveals growth areas
Content inspirationposts/all on top voices + posts/info for engagement stats
Warm outreach prepprofile/recommendations + posts/all before messaging
Job trigger eventsjobs/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).

Files

3 total
Select a file
Select a file to preview.

Comments

Loading comments…