npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

linkup-sdk

v3.2.7

Published

A Javascript Client SDK for the Linkup API

Readme

🚀 Linkup JS/TS SDK

npm package License: MIT downloads

A JS/TS SDK for the Linkup API, allowing easy integration with Linkup's services.

🌟 Features

  • Simple and intuitive API client.
  • 🔍 Supports standard, deep, and beta fast search depths.
  • 🧠 Supports asynchronous research tasks and batched task workflows.
  • 🔒 Handles authentication and request management.

📦 Installation

Requires Node.js >= 22

Simply install the Linkup JS SDK using npm or any other package manager:

npm i linkup-sdk

📚 Documentation

Find the complete documentation here.

🛠️ Usage

Setting Up Your Environment

1. 🔑 Obtain an API Key:

Sign up on Linkup to get your API key.

2. ⚙️ Set-up the API Key:

Pass the Linkup API key to the Linkup Client when creating it.

import { LinkupClient } from 'linkup-sdk';

const client = new LinkupClient({
  apiKey: '<YOUR API KEY>',
});

📋 Search Endpoint

All search queries can be used with three depth modes:

  • with beta fast depth, the search is optimized for the quickest turnaround on lightweight queries

  • with standard depth, the search will be straightforward and fast, suited for relatively simple queries (e.g. "What's the weather in Paris today?")

  • with deep depth, the search will use an agentic workflow, which makes it in general slower, but it will be able to solve more complex queries (e.g. "What is the company profile of LangChain accross the last few years, and how does it compare to its concurrents?")

You can also refine search requests with:

  • includeDomains and excludeDomains domain filters (includeDomains accepts up to 100 entries)
  • fromDate and toDate ISO date filters
  • maxResults to cap the number of returned results
  • includeInlineCitations for sourcedAnswer output
  • includeSources for structured output responses

📝 Example standard search query

import { LinkupClient } from 'linkup-sdk';

const client = new LinkupClient({
  apiKey: '<YOUR API KEY>',
});

const askLinkup = () => client.search({
  query: 'Can you tell me which women were awared the Physics Nobel Prize',
  depth: 'standard',
  outputType: 'sourcedAnswer',
});

askLinkup()
  .then(console.log)
  .catch(console.error);

⬇️ Fetch Endpoint

You can use the fetch endpoint to retrieve the content of a given URL in clean markdown format.

Use renderJs to execute the JavaScript code of the page before returning the content.

Use includeRawHtml to get the raw HTML of the page.

Use extractImages to get an extracted list of images from the page.

📝 Example

import { LinkupClient } from 'linkup-sdk';

const client = new LinkupClient({
  apiKey: '<YOUR API KEY>',
});

const fetchLinkup = async () => client.fetch({
  url: 'https://docs.linkup.so',
  renderJs: true,
});

fetchLinkup()
  .then(console.log)
  .catch(console.error);

🧠 Research Endpoint

Use research to create an asynchronous research task, then poll it later or list recent runs.

The research endpoint also supports:

  • mode: answer, auto, investigate, or research
  • reasoningDepth: S, M, L, or XL
  • listResearch({ page, pageSize, sortBy, sortDirection }) to page through recent runs
import { LinkupClient } from 'linkup-sdk';

const client = new LinkupClient({
  apiKey: '<YOUR API KEY>',
});

const task = await client.research({
  query: 'Research the current state of the semiconductor market, covering key market dynamics, major industry players and their strategic positioning, recent analyst sentiment, and the main bull and bear cases for the sector. Ground the report in sourced, factual information.',
  outputType: 'sourcedAnswer',
  mode: 'auto',
  reasoningDepth: 'L',
});

const latest = await client.getResearch(task.id);
const recent = await client.listResearch({ page: 1, pageSize: 10, sortDirection: 'desc' });

🗂️ Tasks Endpoint

Use createTasks to submit mixed search, fetch, and research jobs in one batch, then inspect them through listTasks or getTask.

createTasks accepts up to 100 tasks per batch. listTasks supports pagination and filtering via page, pageSize, sortBy, sortDirection, status, and type.

import { LinkupClient } from 'linkup-sdk';

const client = new LinkupClient({
  apiKey: '<YOUR API KEY>',
});

const tasks = await client.createTasks([
  {
    type: 'search',
    input: {
      query: 'Linkup latest product updates',
      depth: 'deep',
      outputType: 'sourcedAnswer',
    },
  },
  {
    type: 'fetch',
    input: {
      url: 'https://docs.linkup.so',
    },
  },
]);

console.log(tasks.map(task => task.id));

const queued = await client.listTasks({
  status: ['pending', 'processing'],
  type: ['search', 'research'],
  sortBy: 'updatedAt',
  sortDirection: 'desc',
  page: 1,
  pageSize: 20,
});

console.log(queued.quota);

💳 X402 Payment Protocol

The SDK supports the X402 payment protocol, allowing you to pay for API calls with on-chain transactions instead of an API key.

Prerequisites

Install the required peer dependencies:

npm i viem @x402/core @x402/evm

📝 Example

Create a viem LocalAccount compatible with Base (Ethereum):

import { privateKeyToAccount } from 'viem/accounts';

const account = privateKeyToAccount('<YOUR WALLET PRIVATE KEY>');
import { mnemonicToAccount } from 'viem/accounts';

const account = mnemonicToAccount('<YOUR MNEMONIC PHRASE>');

Then pass it to createX402Signer and use the Linkup client:

import { LinkupClient } from 'linkup-sdk';
import { createX402Signer } from 'linkup-sdk/x402';

const signer = createX402Signer(account);
const client = new LinkupClient({ signer });

const response = await client.search({
  query: 'What is the X402 payment protocol?',
  depth: 'standard',
  outputType: 'sourcedAnswer',
});