# Linkup

Search result sources, sourced answers, and structured outputs remain distinct modes.

Canonical: https://searchsdk.dev/docs/providers/linkup
Markdown: https://searchsdk.dev/docs/providers/linkup.md

<a id="overview"></a>

## Normalized search

> **TypeScript reference**
> The API names, code and policy behavior in this article describe the TypeScript SDK. See [your language guide](https://searchsdk.dev/docs/sdks) for its supported surface and limits.

Normalized search selects a source-result output with fast depth and no image results. It maps returned source names, URLs, and content. Sourced answers and structured output belong on the native surface.

**linkup-search.ts · server**

```typescript
import { createSearch } from '@belweave/search-sdk';
import { linkup } from '@belweave/search-sdk/linkup';

const apiKey = process.env.LINKUP_API_KEY;
if (!apiKey) throw new Error('LINKUP_API_KEY is required');

const client = createSearch({ provider: linkup({ apiKey }) });
const response = await client.web.search({
  query: 'SQLite write concurrency',
  limit: 5,
});
console.log(response.results, response.attempts);
```

Depth and outputType change work and response semantics. Do not pass a sourced answer to code expecting source rows. The current native reference uses a JSON body with `q`, `depth`, and `outputType`; older overview examples may differ.

100 include / 50 exclude under SDK policy.

<a id="native-client"></a>

## Provider-native client

**linkup-native.ts · server**

```typescript
import { createLinkupClient } from '@belweave/search-sdk/native-linkup';

const apiKey = process.env.LINKUP_API_KEY;
if (!apiKey) throw new Error('LINKUP_API_KEY is required');

const client = createLinkupClient({ apiKey, timeoutMs: 10_000 });
const response = await client.search({ body: { q: 'SQLite write concurrency', depth: 'fast', outputType: 'searchResults' } });
console.log(response.data, response.metadata);
```

Read provider data from `response.data` and sanitized transport details from `response.metadata`. Native TypeScript response types are not runtime schema validation. Preserve the operation's native response and source identities.

<a id="operations"></a>

## Native operation inventory

Methods available on this native client. Paths are relative to each operation's fixed base; a provider may use more than one origin. Eligible operations retry only when you opt into a client retry policy.

| Method | HTTP / relative path | Response / retry eligibility |
| --- | --- | --- |
| `balance` | `GET /v1/credits/balance` | json · eligible |
| `createExtract` | `POST /v1/extract` | json · no automatic retry |
| `listExtract` | `GET /v1/extract` | json · eligible |
| `getExtract` | `GET /v1/extract/{id}` | json · eligible |
| `fetchPage` | `POST /v1/fetch` | json · no automatic retry |
| `search` | `POST /v1/search` | json · no automatic retry |
| `createTasks` | `POST /v1/tasks` | json · no automatic retry |
| `listTasks` | `GET /v1/tasks` | json · eligible |
| `getTask` | `GET /v1/tasks/{id}` | json · eligible |
| `responses` | `POST /v1/responses` | json · no automatic retry |
| `createResearch` | `POST /v1/research` | json · no automatic retry |
| `listResearch` | `GET /v1/research` | json · eligible |
| `getResearch` | `GET /v1/research/{id}` | json · eligible |
| `rewindSearch` | `POST /v1/rewind/search` | json · no automatic retry |
| `rewindFetch` | `POST /v1/rewind/fetch` | json · no automatic retry |

<a id="lifecycle"></a>

## Limits and operation lifecycle

- Pass `signal` and per-call `timeoutMs` on native request input when needed.
- Persist a returned job identifier before explicitly reading or polling the same job. Native clients do not automatically poll.
- SSE data is incremental provider event text. Parse and validate terminal or error events according to the provider contract; there is no reconnect or replay.
- Native operations may create, delete, ingest, or incur charges. A successful HTTP response is not proof that a remote job completed.

<a id="sources"></a>

## Official sources

Use the official reference for current schemas, account access, and operation-specific requirements.

- [Search overview](https://docs.linkup.so/pages/documentation/endpoints/search/overview)
- [Documentation index](https://docs.linkup.so/llms.txt)

- [Native request and response reference](https://searchsdk.dev/docs/api/native-transport)
- [All providers](https://searchsdk.dev/docs/providers)
