> ## Documentation Index
> Fetch the complete documentation index at: https://docs.modulex.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Linkup Integration for AI Agents & Workflows

> Search the web with Linkup — retrieve up-to-date information with source attribution, returning either an AI-generated sourced answer or raw ranked search results.

{/* Self-hosted logo — build-time vendored from modulex.json / Iconify (see scripts/lib/logo.js). */}

<img src="https://mintcdn.com/modulexaillc/df8MOr-hXotYLTh5/logos/placeholder.svg?fit=max&auto=format&n=df8MOr-hXotYLTh5&q=85&s=a4046f9cd6d738c81259050e9833913c" alt="Linkup logo" width="72" height="72" data-path="logos/placeholder.svg" />

## Overview

Add **Linkup** to any ModuleX agent or workflow. Web search for AI agents — retrieve up-to-date information from across the web with source attribution, via the Linkup REST API (`api.linkup.so/v1`).

<Info>
  **Categories**: Web Search & Scraping · Data · Search · **Auth**: API Key · **Actions**: 1
</Info>

## Authentication

### API Key Authentication

Authenticate using your Linkup API key

<Steps>
  <Step title="Step 1">
    Go to [https://app.linkup.so](https://app.linkup.so) and sign up or log in
  </Step>

  <Step title="Step 2">
    Open the API Keys section of your dashboard
  </Step>

  <Step title="Step 3">
    Create a new API key or copy your existing one
  </Step>

  <Step title="Step 4">
    Paste the API key below
  </Step>
</Steps>

#### Required Credentials

| Field          | Description                            | Required | Format |
| -------------- | -------------------------------------- | -------- | ------ |
| Linkup API Key | Your Linkup API key from app.linkup.so | Yes      | `-`    |

## Available Actions

<AccordionGroup>
  <Accordion title="search — Search the web for information using Linkup.">
    ### Parameters

    <ResponseField name="q" type="string" required>
      The search query (e.g., "latest AI research papers 2024")
    </ResponseField>

    <ResponseField name="depth" type="string">
      Search depth: "standard" for quick results, "deep" for comprehensive search (also supports "fast") (Default: `standard`)
    </ResponseField>

    <ResponseField name="output_type" type="string">
      Output format: "sourcedAnswer" for an AI-generated answer with citations, "searchResults" for raw results, or "structured" (Default: `sourcedAnswer`)
    </ResponseField>

    <ResponseField name="include_images" type="boolean">
      Whether to include images in search results
    </ResponseField>

    <ResponseField name="include_inline_citations" type="boolean">
      Add inline citations to answers (only applies when output\_type is "sourcedAnswer")
    </ResponseField>

    <ResponseField name="include_sources" type="boolean">
      Include sources in the response
    </ResponseField>

    <ResponseField name="from_date" type="string">
      Start date for filtering results (YYYY-MM-DD format)
    </ResponseField>

    <ResponseField name="to_date" type="string">
      End date for filtering results (YYYY-MM-DD format)
    </ResponseField>

    <ResponseField name="include_domains" type="string">
      Comma-separated list of domain names to restrict search results to
    </ResponseField>

    <ResponseField name="exclude_domains" type="string">
      Comma-separated list of domain names to exclude from search results
    </ResponseField>

    ### Response

    ```json theme={null}
    {
      "$defs": {
        "SearchResultItem": {
          "additionalProperties": false,
          "description": "A single result row in a ``searchResults`` response.",
          "properties": {
            "type": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Type"
            },
            "name": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Name"
            },
            "url": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Url"
            },
            "content": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Content"
            }
          },
          "title": "SearchResultItem",
          "type": "object"
        },
        "SearchSource": {
          "additionalProperties": false,
          "description": "A citation in a ``sourcedAnswer`` response's ``sources`` array.",
          "properties": {
            "name": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Name"
            },
            "url": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Url"
            },
            "snippet": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Snippet"
            }
          },
          "title": "SearchSource",
          "type": "object"
        }
      },
      "additionalProperties": false,
      "properties": {
        "success": {
          "title": "Success",
          "type": "boolean"
        },
        "error": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Error"
        },
        "answer": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Answer"
        },
        "sources": {
          "items": {
            "$ref": "#/$defs/SearchSource"
          },
          "title": "Sources",
          "type": "array"
        },
        "results": {
          "items": {
            "$ref": "#/$defs/SearchResultItem"
          },
          "title": "Results",
          "type": "array"
        },
        "structured_data": {
          "anyOf": [
            {
              "additionalProperties": true,
              "type": "object"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Structured Data"
        }
      },
      "required": [
        "success"
      ],
      "title": "SearchOutput",
      "type": "object"
    }
    ```
  </Accordion>
</AccordionGroup>

## Limits & Quotas

* **Rate limit**: \~60 requests/min.
* **Depth tiers**: `standard` queries are cheaper and faster; `deep`
  queries cost more and take longer.
* **Error model**: non-2xx responses and timeouts are caught and
  returned as `success=False` + `error` rather than raising. Plan for
  retries on the agent side based on the error string.

## Related integrations

<CardGroup cols={3}>
  <Card title="Exa Search" href="/integrations/tools/exa-search" />

  <Card title="Firecrawl" href="/integrations/tools/firecrawl" />

  <Card title="Serper" href="/integrations/tools/serper" />
</CardGroup>

## Links

* [Linkup](https://www.linkup.so)
