Skip to content
looot docs
Esc
↑↓navigate↵open⌘Jpreview
On this page

Linkup / Search the web

Linkup tool linkup-search on looot: input fields, $0.005 per call, output shape, and code to run it with curl, JavaScript or Python.

Searches the web and returns ranked results, a sourced answer or structured output. Send q; depth picks fast, standard or deep, outputType picks the format, and includeDomains, excludeDomains, fromDate and toDate filter it. Returns results with name, url and content.

Inputs

Name Type Required Description
depth string yes Search depth: fast, standard or deep. fast and standard cost $0.005, deep $0.05 (docs.linkup.so). Example: “standard”
excludeDomains array no The domains you want to exclude of the search. By default, don’t restrict the search.
fromDate string no Start date, YYYY-MM-DD. Must be before toDate when both are sent. Example: “2025-01-01”
includeDomains array no The domains you want to search on. By default, don’t restrict the search. You can provide up to 100 domains.
includeImages string no Defines whether the API should include images in its results.
includeInlineCitations string no Relevant only when outputType is sourcedAnswer. Defines whether the answer should include inline citations.
includeSources string no Relevant only when outputType is structured. Defines whether the response should include sources. Please note that it modifies the schema of the response, see below
maxResults number no The maximum number of results to return. The number of results will always be ≤ to maxResults. Example: 5
outputType string yes Output type: searchResults, sourcedAnswer or structured. structured also needs structuredOutputSchema. Example: “searchResults”
q string yes The natural language question for which you want to retrieve context. Example: “What is Microsoft’s 2024 revenue?”
structuredOutputSchema string no Required only when outputType is structured. Provide a JSON schema (as a string) representing the desired response format. The root must be of type object.
toDate string no End date, YYYY-MM-DD. Must be after fromDate when both are sent. Example: “2025-06-30”

Output

Shape of the run’s result, checked against 16 real answers:

{ results: { url, name, type, content, favicon }[] }

Run it

Every call needs your API token in LOOOT_TOKEN; Sign in shows how to get one. Each run also needs a new idempotency key, so a retry never pays twice. With wait: 30 the answer comes back inline when the run ends within 30 seconds. Otherwise you get the running run back: poll GET /v1/runs/<runId>.

Example input with placeholder values:

curl -X POST "https://api.looot.ai/v1/runs" \
  -H "Authorization: Bearer $LOOOT_TOKEN" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{"endpointId":"linkup-search","input":{"q":"What is Microsoft'\''s 2024 revenue?","depth":"standard","outputType":"searchResults","toDate":"2025-06-30","fromDate":"2025-01-01","maxResults":5,"excludeDomains":["wikipedia.org"],"includeDomains":["microsoft.com","agolution.com"]},"wait":30}'
const response = await fetch("https://api.looot.ai/v1/runs", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.LOOOT_TOKEN}`,
    "Content-Type": "application/json",
    "Idempotency-Key": crypto.randomUUID(),
  },
  body: JSON.stringify({
    endpointId: "linkup-search",
    input: {
      q: "What is Microsoft's 2024 revenue?",
      depth: "standard",
      outputType: "searchResults",
      toDate: "2025-06-30",
      fromDate: "2025-01-01",
      maxResults: 5,
      excludeDomains: ["wikipedia.org"],
      includeDomains: ["microsoft.com", "agolution.com"],
    },
    wait: 30,
  }),
});
const run = await response.json();
console.log(run.status, run.result);
import os
import uuid

import requests

response = requests.post(
    "https://api.looot.ai/v1/runs",
    headers={
        "Authorization": f"Bearer {os.environ['LOOOT_TOKEN']}",
        "Idempotency-Key": str(uuid.uuid4()),
    },
    json={
        "endpointId": "linkup-search",
        "input": {
            "q": "What is Microsoft's 2024 revenue?",
            "depth": "standard",
            "outputType": "searchResults",
            "toDate": "2025-06-30",
            "fromDate": "2025-01-01",
            "maxResults": 5,
            "excludeDomains": ["wikipedia.org"],
            "includeDomains": ["microsoft.com", "agolution.com"],
        },
        "wait": 30,
    },
    timeout=90,
)
run = response.json()
print(run["status"], run.get("result"))

To let looot pick among every provider of this job instead, send job:web.search as endpointId; see the job page.

Was this page helpful?