Skip to article

TinyFish

Ranked web sources in normalized search, with separate native search, fetch, browser, and agent operations.

On this page

Normalized search

Normalized search requests page zero and domain_type=web. It preserves result titles, links, and snippets in order. Position is not a relevance score. Unreported usage remains null.

tinyfish-search.ts · server
import { createSearch } from '@belweave/search-sdk';
import { tinyfish } from '@belweave/search-sdk/tinyfish';

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

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

The normalized adapter performs one request without a native count parameter or automatic pagination. Provider totals are not a promise that the SDK can return the requested number. Native search options and browser execution are separate operations.

100 include / 100 exclude under a conservative SDK policy; this is not a verified native maximum.

Provider-native client

tinyfish-native.ts · server
import { createTinyfishClient } from '@belweave/search-sdk/native-tinyfish';

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

const client = createTinyfishClient({ apiKey, timeoutMs: 10_000 });
const response = await client.search({ query: { query: 'SQLite write concurrency', domain_type: 'web', page: 0 } });
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.

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.

47 / 47
MethodHTTP / relative pathResponse / retry eligibility
runSsePOST /v1/automation/run-sseSSE stream · no automatic retry
runPOST /v1/automation/runjson · no automatic retry
runAsyncPOST /v1/automation/run-asyncjson · no automatic retry
runBatchPOST /v1/automation/run-batchjson · no automatic retry
listRunsGET /v1/runsjson · eligible
batchGetRunsPOST /v1/runs/batchjson · no automatic retry
batchCancelRunsPOST /v1/runs/batch/canceljson · no automatic retry
getRunByIdGET /v1/runs/{id}json · eligible
cancelRunByIdPOST /v1/runs/{id}/canceljson · no automatic retry
getStepScreenshotGET /v1/runs/{id}/steps/{stepId}/screenshotbytes · eligible
getStepHtmlGET /v1/runs/{id}/steps/{stepId}/htmltext · eligible
listBrowserContextProfilesGET /v1/profilesjson · eligible
createBrowserContextProfilePOST /v1/profilesjson · no automatic retry
getBrowserContextProfileGET /v1/profiles/{profileId}json · eligible
updateBrowserContextProfilePATCH /v1/profiles/{profileId}json · no automatic retry
deleteBrowserContextProfileDELETE /v1/profiles/{profileId}json · no automatic retry
createBrowserContextProfileSetupSessionPOST /v1/profiles/{profileId}/setup-sessionjson · no automatic retry
cancelBrowserContextProfileSetupSessionPOST /v1/profiles/{profileId}/setup-session/canceljson · no automatic retry
saveBrowserContextProfileSetupSessionPOST /v1/profiles/{profileId}/savejson · no automatic retry
uploadBrowserContextProfileStatePOST /v1/profiles/{profileId}/uploadjson · no automatic retry
deleteBrowserContextProfileDomainDELETE /v1/profiles/{profileId}/domains/{domain}json · no automatic retry
connectVaultPOST /v1/vault/connectionsjson · no automatic retry
listVaultConnectionsGET /v1/vault/connectionsjson · eligible
disconnectVaultDELETE /v1/vault/connections/{connectionId}json · no automatic retry
listVaultItemsGET /v1/vault/itemsjson · eligible
syncVaultItemsPOST /v1/vault/items/syncjson · no automatic retry
getWalletGET /v1/walletjson · eligible
topUpWalletPOST /v1/wallet/top-upjson · no automatic retry
searchGET /json · eligible
listSearchUsageGET /usagejson · eligible
fetchUrlsPOST /json · no automatic retry
listFetchUsageGET /usagejson · eligible
createBrowserSessionPOST /json · no automatic retry
listBrowserUsageGET /usagejson · eligible
deleteBrowserSessionDELETE /{sessionId}text · no automatic retry
createMonitorPOST /v1/monitorsjson · no automatic retry
listMonitorsGET /v1/monitorsjson · eligible
getMonitorGET /v1/monitors/{id}json · eligible
updateMonitorPATCH /v1/monitors/{id}json · no automatic retry
deleteMonitorDELETE /v1/monitors/{id}json · no automatic retry
runMonitorPOST /v1/monitors/{id}/runsjson · no automatic retry
runResearchPOST /v1/automation/run-researchSSE stream · no automatic retry
startResearchAsyncPOST /v1/automation/run-research-asyncjson · no automatic retry
streamResearchEventsGET /v1/research-run/{research_run_id}/eventsSSE stream · no automatic retry
listResearchRunsGET /v1/research-runjson · eligible
getResearchRunGET /v1/research-run/{research_run_id}json · eligible
cancelResearchRunPOST /v1/research-run/{research_run_id}/canceljson · no automatic retry

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.

Official sources

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