Three SDKs. One protocol.
Python, TypeScript, Go. Same auth modes. Same envelope. Same depth integers. Each SDK is a thin client over the public REST API; choose the one your runtime speaks and treat the others as identical.
Python
Async-native. Works under asyncio and inside FastAPI/Starlette. Sync wrappers provided for scripts and notebooks.
pip install {{TBD-install-command-py}}
from deeptap import DeepTap
client = DeepTap(api_key="dt_live_...")
result = await client.search(
query="What is the EU AI Act enforcement date for general-purpose models?",
depth=1,
)
for fact in result.facts:
print(fact.claim, fact.source_url, fact.firewall_verdict)
TypeScript / Node
ESM and CommonJS builds. Works in Node 20+, Bun, Deno. Browser SDK is intentionally not shipped; retrieval should not be exposed to untrusted clients.
npm install {{TBD-install-command-node}}
import { DeepTap } from "deeptap";
const client = new DeepTap({ apiKey: process.env.DEEPTAP_API_KEY });
const result = await client.search({
query: "...",
depth: 1,
});
for (const fact of result.facts) {
console.log(fact.claim, fact.sourceUrl, fact.firewallVerdict);
}
Go
Module path under the RelayOne org. Idiomatic Go: context-aware, no global state, errors returned, no panics on remote failure.
go get {{TBD-install-command-go}}
import "github.com/RelayOne/deeptap-go"
client := deeptap.New(deeptap.WithAPIKey(os.Getenv("DEEPTAP_API_KEY")))
res, err := client.Search(ctx, deeptap.SearchRequest{
Query: "...",
Depth: 1,
})
if err != nil { return err }
for _, f := range res.Facts {
fmt.Println(f.Claim, f.SourceURL, f.FirewallVerdict)
}
Auth across SDKs
Every SDK accepts all four auth modes. Pass an API key for the simplest case; pass an x402 receipt for machine-to-machine commerce; pass an MPP envelope for multi-party flows; pass a TrueCom-signed envelope for signed-receipt agentic commerce. The constructor pattern is the same in every language. See Auth and payment.
Streaming for depth 3
Depth 3 streams partial progress as the stopping AI evaluates saturation. Each SDK exposes an async iterator over progress events. Cancel mid-stream to stop the run; usage is billed for the rounds already executed.
Errors and retries
Transient errors (timeouts, 5xx, rate-limit) are retryable with exponential backoff; SDKs retry by default with a sane policy. Non-retryable errors (auth failure, malformed envelope, unsupported depth) raise immediately. Error envelopes include a request_id that DeepTap support can correlate against the audit log.
What is not in the SDKs
The SDKs are clients, not retrieval engines. They do not run the pipeline locally. They do not cache facts on the client. They do not embed firewall logic. The protocol-side guarantees only hold when the engine evaluates the query; client-side optimizations would invalidate the receipt. Use the engine.