For agents
Install the VendorStacks skill in your agent
This is the quick overview — the canonical deep integration docs (OpenAI/Anthropic/LangChain wrappers, MCP status, cost discipline, machine payments) live at /docs/agents.
VendorStacks is designed to be operated by agents: instant key issuance, deterministic JSON output, machine-readable paywalls. The API serves an installable skill file at vendorradar-production.up.railway.app /skill — a markdown document that teaches an agent the endpoints, the credit economics, and the cost-discipline rules in one fetch.
Claude Code / Claude Agent SDK
Save the skill file into your project's skills directory. Claude Code discovers it automatically and loads it when a task involves vendor-stack lookups.
mkdir -p .claude/skills/vendorstacks curl -s https://vendorradar-production.up.railway.app /skill \ -o .claude/skills/vendorstacks/SKILL.md
Cursor, custom agents, anything else
The skill file is plain markdown — paste it into your system prompt or rules file, or fetch it at runtime as context. It is written to be read by a model, not a human.
curl -s https://vendorradar-production.up.railway.app /skill # → paste the output into your system context / .cursorrules
Function-calling tool definition
Prefer explicit tools? Register this definition with the Anthropic API (shown) — for OpenAI, rename input_schema to parameters and nest it under a function object. The description carries the two rules agents most often get wrong: expect scans to take time (not money), and don't treat found: false as "no vendors".
{
"name": "vendorstacks_check_entity",
"description": "Look up whether an entity (by domain) publishes a subprocessor/DPA disclosure and which vendors it names, as a structured vendor stack across 13 categories with quoted evidence. Every lookup costs 1 credit flat: indexed answers return <1s, unindexed domains live-scan automatically (15-90s, same price) — use a 120s timeout. found=false means no disclosure was located, NOT that the entity uses no vendors.",
"input_schema": {
"type": "object",
"properties": {
"url": {
"type": "string",
"description": "Domain of the entity to check, e.g. acme.com"
},
"fresh": {
"type": "boolean",
"description": "Force a live re-scan of an indexed domain. Default false. Same 1-credit price, just slower."
}
},
"required": ["url"]
}
}# Pseudocode: the tool-call handler
async function vendorstacks_check_entity({ url, fresh = false }) {
const res = await fetch(
`https://vendorradar-production.up.railway.app
/v1/check?url=${encodeURIComponent(url)}` +
(fresh ? "&fresh=true" : ""),
{ headers: { Authorization: `Bearer ${VENDORSTACKS_KEY}` } },
);
if (res.status === 402) {
const { topup_url, required_credits } = await res.json();
// Hand off to the human: exact price, exact URL. Then retry.
return { needs_human: true, topup_url, required_credits };
}
return await res.json();
}Machine-readable everything
- vendorradar-production.up.railway.app /llms.txt— orientation file for LLMs
- vendorradar-production.up.railway.app /openapi.json— OpenAPI 3.1 spec
- vendorradar-production.up.railway.app /skill— installable SKILL.md
- vendorradar-production.up.railway.app /agents— agent integration guide
No key yet?
Your agent can self-provision one — a single POST with an email, key returned in the same response, 25 free credits attached.