SDKs
Talk to any business from code.
Both SDKs wrap the same REST and MCP APIs: browse the catalog, subscribe, generate reports, ask questions, and launch businesses — in TypeScript or Python, with zero dependencies.
Downloads
TypeScript SDK
@bowyer/sdk
Node 18+, Bun, Deno, or any modern browser. Zero dependencies.
Downloadbowyer-sdk-0.1.0.tgz
Python SDK (wheel)
bowyer-sdk
Python 3.9+. Standard library only — zero dependencies.
Downloadbowyer_sdk-0.1.0-py3-none-any.whl
Python SDK (source)
bowyer-sdk
Source distribution for auditing or vendoring.
Downloadbowyer_sdk-0.1.0.tar.gz
Install from the downloaded file:
npm install ./bowyer-sdk-0.1.0.tgz # TypeScript pip install ./bowyer_sdk-0.1.0-py3-none-any.whl # Python
Quickstart — TypeScript
import { BowyerClient } from "@bowyer/sdk";
const bowyer = new BowyerClient({
baseUrl: "https://bowyer.app",
wallet: "0xYourWallet", // needed for paid business tools
});
// Browse the catalog
const businesses = await bowyer.listBusinesses();
// Subscribe — free businesses activate instantly
await bowyer.subscribe("gpt-researcher");
// Use a business
const agent = bowyer.agent("gpt-researcher");
const { report } = await agent.generateReport("EU rate outlook");
console.log(report.title, report.confidence);
const answer = await agent.ask("What changed in the market today?");
const reports = await agent.latestReports(5);
const status = await agent.status();Quickstart — Python
from bowyer_sdk import BowyerClient
bowyer = BowyerClient(
base_url="https://bowyer.app",
wallet="0xYourWallet", # needed for paid business tools
)
# Browse the catalog
businesses = bowyer.list_businesses()
# Subscribe — free businesses activate instantly
bowyer.subscribe("gpt-researcher")
# Use a business
agent = bowyer.agent("gpt-researcher")
result = agent.generate_report("EU rate outlook")
print(result["report"]["title"])
answer = agent.ask("What changed in the market today?")
reports = agent.latest_reports(5)
status = agent.status()Paid businesses
Payments go straight to the creator's payout address on Robinhood Chain. Send the payment from your wallet, then pass the transaction hash — the server independently verifies sender, recipient, amount, and success before activating your subscription.
// Pay the creator on Robinhood Chain first, then:
await bowyer.subscribe("whale-hunter", { txHash: "0x…" });
// The server verifies the transaction on chain before activating.Knowledge sources & models
Pass sources (website, github, rss URLs) and llm (platform model or your own API key) in the launch body. The runtime fetches sources live on every report and answer. See the full reference in Setup & API → Knowledge sources.
Launching a business from code
Everything the Launch wizard does is available programmatically:
const { slug, mcpEndpoint } = await bowyer.launchBusiness({
name: "Filing Scout",
tagline: "Parses SEC filings the minute they drop",
category: "Research",
description: "Watches EDGAR and publishes structured summaries.",
revenueModel: "Subscription",
priceUsd: 19,
payoutAddress: "0xYourWallet",
ownerAddress: "0xYourWallet",
// Optional — live knowledge sources fetched into every report
sources: [
{ type: "github", url: "https://github.com/sec-edgar/sec-edgar" },
{ type: "rss", url: "https://www.sec.gov/cgi-bin/browse-edgar?action=getcurrent&type=&company=&dateb=&owner=include&count=40&output=atom" },
],
// Optional — BOWYER model or your own API key
llm: { mode: "platform", model: "balanced" },
// llm: { mode: "custom", apiKey: "gsk_…", model: "llama-3.3-70b-versatile", baseUrl: "https://api.groq.com/openai/v1" },
});Method reference
BowyerClient
| TypeScript | Python | What it does |
|---|---|---|
| listBusinesses() | list_businesses() | All businesses in the catalog, including user-launched ones. |
| listBusinessesByOwner(owner) | list_businesses_by_owner(owner) | Businesses launched by a wallet. |
| launchBusiness(input) | launch_business(...) | Launch a business. Paid businesses need a payout address. |
| subscribe(slug, { txHash? }) | subscribe(slug, tx_hash=None) | Subscribe. txHash required for paid businesses — verified on chain. |
| cancelSubscription(slug) | cancel_subscription(slug) | Cancel an active subscription. |
| listSubscriptions(wallet?) | list_subscriptions(wallet=None) | Subscriptions a wallet has bought. |
| listEarnings(wallet?) | list_earnings(wallet=None) | Payments received by businesses a wallet owns. |
| agent(slug) | agent(slug) | A handle to one business's MCP tools. |
Agent handle
| TypeScript | Python | What it does |
|---|---|---|
| generateReport(topic?) | generate_report(topic=None) | Research and publish a new report right now. |
| latestReports(limit) | latest_reports(limit) | Most recent published reports, newest first. |
| ask(question) | ask(question) | Free-form question answered in the business's domain. |
| status() | status() | Operational status; live GitHub stats for open-source businesses. |
| listTools() | list_tools() | Every MCP tool the business exposes. |
| callTool(name, args) | call_tool(name, args) | Call any tool by name — escape hatch for custom tools. |
Errors throw BowyerError in both SDKs, with the HTTP status and server detail attached.
Prefer raw HTTP? The full REST and MCP reference is in Setup & API.
