Search API
SearchPipe is a web search API and MCP server for developers building AI agents. Retrieve relevant pages, request a cited answer, and inspect supporting evidence.
Call POST /v1/search with a question or keywords. The response includes source URLs, titles, snippets, and scores. Basic and advanced searches use LLM ranking; fast returns fused engine results without LLM processing.
For known URLs, use Extract. For claims and citations from your own pipeline, use Verify or batch verification.
| Depth | Cost | Processing |
|---|---|---|
fast | 0.5 credits | Retrieval, rule fusion, and page fetching. No generated answer or audit; raw engine scores are not normalized. |
basic | 1 credit | LLM-ranked results and an optional cited answer. |
advanced | 2 credits | LLM-ranked results and an optional cited answer with a statement-level audit when available. |
Use output_type="search_results" (default), "answer", or "structured". Fast skips answer generation. Basic and advanced can stream answer text over SSE. Structured output uses a flat schema; validate the generated object in your application.
Verify your email and copy your key from API Keys. Authenticate with Authorization: Bearer sp-YOUR_KEY or X-API-Key: sp-YOUR_KEY. This example requests a basic cited answer.
curl -X POST https://searchpipe.tech/v1/search \
-H "Authorization: Bearer sp-YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{"query":"FastAPI tutorial","max_results":5,"output_type":"answer"}'import httpx
resp = httpx.post(
"https://searchpipe.tech/v1/search",
headers={"Authorization": "Bearer sp-YOUR_KEY"},
json={"query": "FastAPI tutorial", "max_results": 5, "output_type": "answer"},
timeout=60,
)
resp.raise_for_status()
data = resp.json()
print(data["answer"])
for r in data["results"]:
print(r["score"], r["title"], r["url"])const resp = await fetch("https://searchpipe.tech/v1/search", {
method: "POST",
headers: {
"Authorization": "Bearer sp-YOUR_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({ query: "FastAPI tutorial", max_results: 5, output_type: "answer" }),
});
if (!resp.ok) throw new Error(`Search failed (${resp.status}): ${await resp.text()}`);
const data = await resp.json();
console.log(data.answer);
for (const r of data.results) console.log(r.score, r.title, r.url);package main
import (
"bytes"
"encoding/json"
"fmt"
"io"
"net/http"
"time"
)
func main() {
payload, _ := json.Marshal(map[string]any{
"query": "FastAPI tutorial",
"max_results": 5,
"output_type": "answer",
})
req, _ := http.NewRequest("POST", "https://searchpipe.tech/v1/search", bytes.NewReader(payload))
req.Header.Set("Authorization", "Bearer sp-YOUR_KEY")
req.Header.Set("Content-Type", "application/json")
client := &http.Client{Timeout: 60 * time.Second}
resp, err := client.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
fmt.Println(string(body))
}import java.net.URI;
import java.net.http.*;
import java.time.Duration;
public class SearchPipeDemo {
public static void main(String[] args) throws Exception {
String json = """
{"query":"FastAPI tutorial","max_results":5,"output_type":"answer"}
""";
HttpClient client = HttpClient.newBuilder()
.version(HttpClient.Version.HTTP_1_1)
.connectTimeout(Duration.ofSeconds(10))
.build();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://searchpipe.tech/v1/search"))
.timeout(Duration.ofSeconds(60))
.header("Authorization", "Bearer sp-YOUR_KEY")
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString(json))
.build();
HttpResponse<String> resp =
client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(resp.body());
}
}using System.Net.Http.Json;
using var client = new HttpClient();
client.DefaultRequestHeaders.Authorization =
new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", "sp-YOUR_KEY");
var payload = new
{
query = "FastAPI tutorial",
max_results = 5,
output_type = "answer",
};
HttpResponseMessage resp = await client.PostAsJsonAsync("https://searchpipe.tech/v1/search", payload);
resp.EnsureSuccessStatusCode();
Console.WriteLine(await resp.Content.ReadAsStringAsync());Only query is required. Control max_results (default 5, range 1–20), search_depth, and output_type; add domain/date filters, market preferences, raw content, images, or an agent ranking objective as needed.
Read the result list from results, generated text from answer, or a structured object from output. Optional fields may be null. results[].evidence carries quote spans and fetch metadata when available; advanced answer mode may include answer_audit. Structured mode does not include an answer audit.
REST responses include request_id, response_time, usage, and diagnostic warnings/notices. Inspect these fields before using a response. Response field reference →
Search costs 0.5 / 1 / 2 credits for fast / basic / advanced. Cached calls are charged at the same per-call rate. Pipeline failures and rejected output are refunded; successful empty results or unavailable optional answers can still be billed.
| Plan | Price | Credits |
|---|---|---|
| Free | $0 | 1,000 per UTC calendar month; sign in to renew the monthly allowance. |
| Starter | $10/mo | 2,500 credits / month |
| Pro | $20/mo | 5,000 credits / month |
| Max | $35/mo | 10,000 credits / month |
| Prepaid recharge | $40 | 10,000 credits · $0.0040/credit · never expires |
| Prepaid recharge | $80 | 20,000 credits · $0.0040/credit · never expires |
Custom recharges use the standard $0.005/credit rate. See complete pricing and expiration rules →
SearchPipe is a web search API designed for developers building AI agents who need structured, scored, cleaned results — not raw search-result HTML. It goes beyond traditional search APIs by adding full-text extraction, LLM reranking and optional cited answers.
Same developer-experience style (API key, one endpoint, structured JSON), but SearchPipe adds per-call credit pricing with automatic refunds and a remote MCP Server option for zero-code agent integration.
Yes — and it is not a second-class option. The REST API (POST /search) is fully independent, callable from any language, framework or backend service. MCP and the REST API are equal first-class paths to the same pipeline.
Nothing. Upstream retrieval failures (502) and output content violations (400) are automatically refunded (idempotently). Only successful requests are billed.
Default: 100 requests per minute with a burst of 20, enforced by a Redis sliding window. Over-limit requests return 429 with a Retry-After header. Contact us to raise the quota for high-volume use.
Search API referenceExtract API referenceVerify API referenceDeveloper docsMCP setupAgent configurationCompare search APIsFAQ