{
  "schemaVersion": "1.0",
  "item": {
    "slug": "linkdapi",
    "name": "Linkedin API",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/foontinz/linkdapi",
    "canonicalUrl": "https://clawhub.ai/foontinz/linkdapi",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/linkdapi",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=linkdapi",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "SKILL.md"
    ],
    "primaryDoc": "SKILL.md",
    "quickSetup": [
      "Download the package from Yavira.",
      "Extract the archive and review SKILL.md first.",
      "Import or place the package into your OpenClaw setup."
    ],
    "agentAssist": {
      "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
      "steps": [
        "Download the package from Yavira.",
        "Extract it into a folder your agent can access.",
        "Paste one of the prompts below and point your agent at the extracted folder."
      ],
      "prompts": [
        {
          "label": "New install",
          "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
        },
        {
          "label": "Upgrade existing",
          "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "slug": "linkdapi",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-05-05T00:38:38.616Z",
      "expiresAt": "2026-05-12T00:38:38.616Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=linkdapi",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=linkdapi",
        "contentDisposition": "attachment; filename=\"linkdapi-1.0.0.zip\"",
        "redirectLocation": null,
        "bodySnippet": null,
        "slug": "linkdapi"
      },
      "scope": "item",
      "summary": "Item download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this item.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/linkdapi"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    },
    "downloadPageUrl": "https://openagent3.xyz/downloads/linkdapi",
    "agentPageUrl": "https://openagent3.xyz/skills/linkdapi/agent",
    "manifestUrl": "https://openagent3.xyz/skills/linkdapi/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/linkdapi/agent.md"
  },
  "agentAssist": {
    "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
    "steps": [
      "Download the package from Yavira.",
      "Extract it into a folder your agent can access.",
      "Paste one of the prompts below and point your agent at the extracted folder."
    ],
    "prompts": [
      {
        "label": "New install",
        "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
      },
      {
        "label": "Upgrade existing",
        "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "LinkdAPI Python SDK",
        "body": "Python SDK for LinkdAPI — professional profile and company data from LinkedIn with enterprise-grade reliability.\n\nGet your API key: https://linkdapi.com/signup?ref=K_CZJSWF"
      },
      {
        "title": "Quick Start Pattern",
        "body": "Use the uv script pattern for ephemeral Python scripts with inline dependencies:\n\n# /// script\n# dependencies = [\n#     \"linkdapi\",\n# ]\n# ///\n\nfrom linkdapi import LinkdAPI\n\nclient = LinkdAPI(\"YOUR_API_KEY\")\nprofile = client.get_profile_overview(\"ryanroslansky\")\nprint(profile)\n\nRun with:\n\nuv run script.py\n\nThis installs dependencies automatically, runs the script, and cleans up — perfect for one-off tasks."
      },
      {
        "title": "Why This Pattern",
        "body": "No global installs: Dependencies are managed per-script\nEphemeral by design: Write, run, delete — no cleanup needed\nReproducible: Everything needed is in one file\nFast: uv handles dependency resolution and caching"
      },
      {
        "title": "Script Header Format",
        "body": "Always start with the uv script block:\n\n# /// script\n# dependencies = [\n#     \"linkdapi\",\n#     # Add more if needed (e.g., \"rich\", \"pandas\")\n# ]\n# ///"
      },
      {
        "title": "Common Tasks",
        "body": "Get profile overview:\n\n# /// script\n# dependencies = [\"linkdapi\"]\n# ///\n\nfrom linkdapi import LinkdAPI\n\nclient = LinkdAPI(\"YOUR_API_KEY\")\nprofile = client.get_profile_overview(\"ryanroslansky\")\n\nif profile.get('success'):\n    data = profile['data']\n    print(f\"{data['fullName']} - {data.get('headline', '')}\")\n    print(f\"Location: {data.get('location')}\")\n\nGet company info:\n\n# /// script\n# dependencies = [\"linkdapi\"]\n# ///\n\nfrom linkdapi import LinkdAPI\n\nclient = LinkdAPI(\"YOUR_API_KEY\")\ncompany = client.get_company_info(name=\"google\")\n\nif company.get('success'):\n    data = company['data']\n    print(f\"{data['name']}\")\n    print(f\"Industry: {data.get('industry')}\")\n    print(f\"Employees: {data.get('employeeCount', 'N/A')}\")\n\nSearch jobs:\n\n# /// script\n# dependencies = [\"linkdapi\"]\n# ///\n\nfrom linkdapi import LinkdAPI\n\nclient = LinkdAPI(\"YOUR_API_KEY\")\nresult = client.search_jobs(\n    keyword=\"Software Engineer\",\n    location=\"San Francisco, CA\",\n    time_posted=\"1week\"\n)\n\nif result.get('success'):\n    for job in result['data']['jobs'][:5]:\n        print(f\"{job['title']} at {job['company']}\")\n\nBatch profile enrichment (async):\n\n# /// script\n# dependencies = [\"linkdapi\"]\n# ///\n\nimport asyncio\nfrom linkdapi import AsyncLinkdAPI\n\nasync def enrich():\n    async with AsyncLinkdAPI(\"YOUR_API_KEY\") as api:\n        profiles = await asyncio.gather(\n            api.get_profile_overview(\"ryanroslansky\"),\n            api.get_profile_overview(\"satyanadella\"),\n            api.get_profile_overview(\"jeffweiner08\")\n        )\n        for p in profiles:\n            if p.get('success'):\n                print(p['data']['fullName'])\n\nasyncio.run(enrich())"
      },
      {
        "title": "Agent Workflow",
        "body": "When a user requests LinkedIn data:\n\nIdentify the task (profile lookup, company data, job search, etc.)\nWrite a temporary script in workspace with the uv script header\nAdd dependencies (usually just \"linkdapi\", add others if needed)\nImport and use LinkdAPI classes\nRun with uv run\nCapture output and report to user\nDelete the script after use (optional)"
      },
      {
        "title": "Example Workflow",
        "body": "User: \"Get the profile for jeffweiner08\"\n\nAgent:\n\ncat > /tmp/linkdapi_query.py << 'EOF'\n# /// script\n# dependencies = [\"linkdapi\"]\n# ///\n\nfrom linkdapi import LinkdAPI\nimport os\n\nclient = LinkdAPI(os.getenv(\"LINKDAPI_API_KEY\"))\nprofile = client.get_profile_overview(\"jeffweiner08\")\n\nif profile.get('success'):\n    data = profile['data']\n    print(f\"Name: {data['fullname']}\")\n    print(f\"Headline: {data.get('headline', 'N/A')}\")\n    print(f\"Location: {data.get('location', 'N/A')}\")\n    print(f\"Company: {data.get('company', 'N/A')}\")\nelse:\n    print(f\"Error: {profile.get('message')}\")\nEOF\n\nuv run /tmp/linkdapi_query.py\nrm /tmp/linkdapi_query.py"
      },
      {
        "title": "Getting an API Key",
        "body": "To use LinkdAPI, you'll need an API key. Sign up at:\n\n🔗 https://linkdapi.com/signup?ref=K_CZJSWF\n\nOnce registered, you'll get an API key that you can use to authenticate your requests."
      },
      {
        "title": "Authentication",
        "body": "Set the API key as an environment variable:\n\nexport LINKDAPI_API_KEY=\"your_api_key_here\"\n\nUse it in scripts:\n\nimport os\nfrom linkdapi import LinkdAPI\n\nclient = LinkdAPI(os.getenv(\"LINKDAPI_API_KEY\"))"
      },
      {
        "title": "Profiles",
        "body": "get_profile_overview(username) — Basic profile info\nget_profile_details(urn) — Detailed profile data\nget_contact_info(username) — Email, phone, websites\nget_full_profile(username=None, urn=None) — Complete profile\nget_full_experience(urn) — Work history\nget_education(urn) — Education history\nget_skills(urn) — Skills & endorsements"
      },
      {
        "title": "Companies",
        "body": "get_company_info(company_id=None, name=None) — Company details\ncompany_name_lookup(query) — Search by name\nget_company_employees_data(company_id) — Employee stats\nget_company_jobs(company_ids) — Job listings"
      },
      {
        "title": "Jobs",
        "body": "search_jobs(keyword, location, ...) — Search job postings\nget_job_details(job_id) — Detailed job info"
      },
      {
        "title": "Search",
        "body": "search_people(keyword, title, company, ...) — Find people\nsearch_companies(keyword, industry, ...) — Find companies\nsearch_posts(keyword, ...) — Find posts"
      },
      {
        "title": "Performance Tips",
        "body": "Use AsyncLinkdAPI for batch operations (40x faster)\nAdd return_exceptions=True in asyncio.gather() for graceful error handling\nUse context managers (async with) for proper resource cleanup"
      },
      {
        "title": "Error Handling",
        "body": "Check responses and handle errors:\n\nresult = client.get_profile_overview(\"username\")\n\nif result.get('success'):\n    data = result['data']\n    # Process data\nelse:\n    print(f\"API Error: {result.get('message')}\")"
      },
      {
        "title": "References",
        "body": "Full API documentation: https://linkdapi.com/docs"
      }
    ],
    "body": "LinkdAPI Python SDK\n\nPython SDK for LinkdAPI — professional profile and company data from LinkedIn with enterprise-grade reliability.\n\nGet your API key: https://linkdapi.com/signup?ref=K_CZJSWF\n\nQuick Start Pattern\n\nUse the uv script pattern for ephemeral Python scripts with inline dependencies:\n\n# /// script\n# dependencies = [\n#     \"linkdapi\",\n# ]\n# ///\n\nfrom linkdapi import LinkdAPI\n\nclient = LinkdAPI(\"YOUR_API_KEY\")\nprofile = client.get_profile_overview(\"ryanroslansky\")\nprint(profile)\n\n\nRun with:\n\nuv run script.py\n\n\nThis installs dependencies automatically, runs the script, and cleans up — perfect for one-off tasks.\n\nWhy This Pattern\nNo global installs: Dependencies are managed per-script\nEphemeral by design: Write, run, delete — no cleanup needed\nReproducible: Everything needed is in one file\nFast: uv handles dependency resolution and caching\nWriting Scripts\nScript Header Format\n\nAlways start with the uv script block:\n\n# /// script\n# dependencies = [\n#     \"linkdapi\",\n#     # Add more if needed (e.g., \"rich\", \"pandas\")\n# ]\n# ///\n\nCommon Tasks\n\nGet profile overview:\n\n# /// script\n# dependencies = [\"linkdapi\"]\n# ///\n\nfrom linkdapi import LinkdAPI\n\nclient = LinkdAPI(\"YOUR_API_KEY\")\nprofile = client.get_profile_overview(\"ryanroslansky\")\n\nif profile.get('success'):\n    data = profile['data']\n    print(f\"{data['fullName']} - {data.get('headline', '')}\")\n    print(f\"Location: {data.get('location')}\")\n\n\nGet company info:\n\n# /// script\n# dependencies = [\"linkdapi\"]\n# ///\n\nfrom linkdapi import LinkdAPI\n\nclient = LinkdAPI(\"YOUR_API_KEY\")\ncompany = client.get_company_info(name=\"google\")\n\nif company.get('success'):\n    data = company['data']\n    print(f\"{data['name']}\")\n    print(f\"Industry: {data.get('industry')}\")\n    print(f\"Employees: {data.get('employeeCount', 'N/A')}\")\n\n\nSearch jobs:\n\n# /// script\n# dependencies = [\"linkdapi\"]\n# ///\n\nfrom linkdapi import LinkdAPI\n\nclient = LinkdAPI(\"YOUR_API_KEY\")\nresult = client.search_jobs(\n    keyword=\"Software Engineer\",\n    location=\"San Francisco, CA\",\n    time_posted=\"1week\"\n)\n\nif result.get('success'):\n    for job in result['data']['jobs'][:5]:\n        print(f\"{job['title']} at {job['company']}\")\n\n\nBatch profile enrichment (async):\n\n# /// script\n# dependencies = [\"linkdapi\"]\n# ///\n\nimport asyncio\nfrom linkdapi import AsyncLinkdAPI\n\nasync def enrich():\n    async with AsyncLinkdAPI(\"YOUR_API_KEY\") as api:\n        profiles = await asyncio.gather(\n            api.get_profile_overview(\"ryanroslansky\"),\n            api.get_profile_overview(\"satyanadella\"),\n            api.get_profile_overview(\"jeffweiner08\")\n        )\n        for p in profiles:\n            if p.get('success'):\n                print(p['data']['fullName'])\n\nasyncio.run(enrich())\n\nAgent Workflow\n\nWhen a user requests LinkedIn data:\n\nIdentify the task (profile lookup, company data, job search, etc.)\nWrite a temporary script in workspace with the uv script header\nAdd dependencies (usually just \"linkdapi\", add others if needed)\nImport and use LinkdAPI classes\nRun with uv run\nCapture output and report to user\nDelete the script after use (optional)\nExample Workflow\n\nUser: \"Get the profile for jeffweiner08\"\n\nAgent:\n\ncat > /tmp/linkdapi_query.py << 'EOF'\n# /// script\n# dependencies = [\"linkdapi\"]\n# ///\n\nfrom linkdapi import LinkdAPI\nimport os\n\nclient = LinkdAPI(os.getenv(\"LINKDAPI_API_KEY\"))\nprofile = client.get_profile_overview(\"jeffweiner08\")\n\nif profile.get('success'):\n    data = profile['data']\n    print(f\"Name: {data['fullname']}\")\n    print(f\"Headline: {data.get('headline', 'N/A')}\")\n    print(f\"Location: {data.get('location', 'N/A')}\")\n    print(f\"Company: {data.get('company', 'N/A')}\")\nelse:\n    print(f\"Error: {profile.get('message')}\")\nEOF\n\nuv run /tmp/linkdapi_query.py\nrm /tmp/linkdapi_query.py\n\nGetting an API Key\n\nTo use LinkdAPI, you'll need an API key. Sign up at:\n\n🔗 https://linkdapi.com/signup?ref=K_CZJSWF\n\nOnce registered, you'll get an API key that you can use to authenticate your requests.\n\nAuthentication\n\nSet the API key as an environment variable:\n\nexport LINKDAPI_API_KEY=\"your_api_key_here\"\n\n\nUse it in scripts:\n\nimport os\nfrom linkdapi import LinkdAPI\n\nclient = LinkdAPI(os.getenv(\"LINKDAPI_API_KEY\"))\n\nKey API Methods\nProfiles\nget_profile_overview(username) — Basic profile info\nget_profile_details(urn) — Detailed profile data\nget_contact_info(username) — Email, phone, websites\nget_full_profile(username=None, urn=None) — Complete profile\nget_full_experience(urn) — Work history\nget_education(urn) — Education history\nget_skills(urn) — Skills & endorsements\nCompanies\nget_company_info(company_id=None, name=None) — Company details\ncompany_name_lookup(query) — Search by name\nget_company_employees_data(company_id) — Employee stats\nget_company_jobs(company_ids) — Job listings\nJobs\nsearch_jobs(keyword, location, ...) — Search job postings\nget_job_details(job_id) — Detailed job info\nSearch\nsearch_people(keyword, title, company, ...) — Find people\nsearch_companies(keyword, industry, ...) — Find companies\nsearch_posts(keyword, ...) — Find posts\nPerformance Tips\nUse AsyncLinkdAPI for batch operations (40x faster)\nAdd return_exceptions=True in asyncio.gather() for graceful error handling\nUse context managers (async with) for proper resource cleanup\nError Handling\n\nCheck responses and handle errors:\n\nresult = client.get_profile_overview(\"username\")\n\nif result.get('success'):\n    data = result['data']\n    # Process data\nelse:\n    print(f\"API Error: {result.get('message')}\")\n\nReferences\n\nFull API documentation: https://linkdapi.com/docs"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/foontinz/linkdapi",
    "publisherUrl": "https://clawhub.ai/foontinz/linkdapi",
    "owner": "foontinz",
    "version": "1.0.0",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/linkdapi",
    "downloadUrl": "https://openagent3.xyz/downloads/linkdapi",
    "agentUrl": "https://openagent3.xyz/skills/linkdapi/agent",
    "manifestUrl": "https://openagent3.xyz/skills/linkdapi/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/linkdapi/agent.md"
  }
}