# Linkup clients against SpecStream

Date: 2026-11-10. Client: linkup-sdk (Python) 0.24.0.

## The one line a user changes

Before:

```
client = LinkupClient(api_key=LINKUP_API_KEY)
```

After:

```
client = LinkupClient(api_key=SPECSTREAM_API_KEY, base_url="https://api.specstream.ai/linkup/v1")
```

## Request parameters

Honoured means the check in the Measured column passed on the reply. Accepted, not applied means status 200 and the reply is the search the call runs without the parameter. Refused means the vendor's error status and body.

Counts: 13 honoured, 4 refused, 3 accepted, not applied.

| Parameter | Sent | Verdict | Measured |
|---|---|---|---|
| `q` | `history of the printing press ...` | honoured | status 200; 10 results |
| `maxResults (not sent)` | absent | honoured | status 200; 10 results |
| `maxResults` | `3` | honoured | status 200; 3 results |
| `depth` | `flash` | honoured | status 200; longest content 218 characters |
| `depth` | `fast` | honoured | status 200; longest content 207 characters |
| `depth` | `standard` | honoured | status 200; longest content 3499 characters |
| `depth` | `deep` | honoured | status 200; longest content 3499 characters |
| `outputType` | `sourcedAnswer` | honoured | status 200; answer 11 characters, 10 sources |
| `outputType` | `structured` | refused | status 400; LinkupInvalidRequestError: The Linkup API returned an invalid request error (400). Make sure the parameters you used are valid  |
| `includeDomains` | `["wikipedia.org"]` | honoured | status 200; 4 of 4 on wikipedia.org |
| `excludeDomains` | `["wikipedia.org"]`, plain POST | honoured | status 200; 0 of 0 off wikipedia.org; the search ran `history of the printing press Japan -site:wikipedia.org` |
| `fromDate` | `2025-01-01` | honoured | status 200; the search ran `history of the printing press India after:2025-01-01` |
| `toDate` | `2020-01-01` | honoured | status 200; the search ran `history of the printing press Russia before:2020-01-01` |
| `fromDate after toDate` | `2025-02-01`, `2025-01-01` | refused | status 400; LinkupInvalidRequestError: The Linkup API returned an invalid request error (400). Make sure the parameters you used are valid  |
| `includeImages` | `True` | accepted, not applied | status 200; 10 text results |
| `includeInlineCitations` | `True` | accepted, not applied | status 200; 7 text results |
| `includeSources` | `True` | accepted, not applied | status 200; 10 text results |
| `depth (not sent)` | absent, plain POST | refused | status 400; Send depth as one of deep, fast, flash, standard. |
| `Authorization (no key)` | absent, plain POST | refused | status 401; Missing API key. Send your SpecStream API key in an Authorization: Bearer header. Get a key at https |
| `q (the docs' GET form)` | query string | honoured | status 200; 10 results |

## Response fields

Present means the field holds a value in every reply or result read; present in n of m counts the results that hold one; absent means the reply leaves it out or sends null.

Counts: 9 present, 2 empty.

| Field | State |
|---|---|
| `results` | present |
| `results[].type` | present |
| `results[].name` | present |
| `results[].url` | present |
| `results[].content` | present |
| `results[].favicon` | empty |
| `answer (sourcedAnswer)` | present |
| `sources[].name (sourcedAnswer)` | present |
| `sources[].url (sourcedAnswer)` | present |
| `sources[].snippet (sourcedAnswer)` | present |
| `sources[].favicon (sourcedAnswer)` | empty |
