REST API
The HTTP API. JSON in, JSON out, any language.
Base URL: https://api.stackresolve.dev. Send your key in the x-api-key header. Reads
are open. The money-spending primitives need a key or fall under a small anonymous trial
limit (Rate Limits). Account and billing endpoints always need
a key (Authentication).
All responses are JSON. Errors return { "error": "..." } with an HTTP status
(Errors).
#Official SDKs
A typed TypeScript client wraps the API. It is published on npm as stackresolve.
npm i stackresolveimport { StackResolve } from 'stackresolve'
const sr = new StackResolve({ apiKey: process.env.STACKRESOLVE_API_KEY })
const report = await sr.audit('stripe.com')
console.log(report.scores.agentready, report.issues)
const company = await sr.getCompany('vercel.com')A Python client (pip install stackresolve) ships next.
#Descriptors
Open, no key. Agents use these to discover the service.
| Method | Path | What it returns |
|---|---|---|
| GET | /health | { "ok": true } |
| GET | /llms.txt | Plain-text capability summary for agents |
| GET | /openapi.json | OpenAPI 3.0 description of the /v1 surface |
| GET | /badge/{slug}.svg | Embeddable AgentReady badge (SVG) |
curl https://api.stackresolve.dev/health
# {"ok":true}#Discovery and readiness
| Method | Path | Metered | Docs |
|---|---|---|---|
| GET | /v1/audit?domain= | Yes (audit_run) | Audit |
| GET | /v1/registry?category=&minScore=&limit= | No | Registry |
| GET | /v1/profile/{slug} | No | Registry |
| GET | /v1/categories | No | Categories |
| GET | /v1/categories/{slug} | No | Categories |
| POST | /v1/search | No | Find tools |
| POST | /v1/find-tools | Yes (agent_discovery_check) | Find tools |
| POST | /v1/compare | No | Registry |
domainstringrequiredThe domain to score, for example stripe.com. A bare slug also works.
curl "https://api.stackresolve.dev/v1/audit?domain=stripe.com" \
-H "x-api-key: $STACKRESOLVE_API_KEY"{
"slug": "stripe",
"domain": "stripe.com",
"name": "Stripe",
"scores": { "agentready": 74, "discovery": 58, "understanding": 83, "adoption": 88, "operability": 67 },
"issues": ["No OpenAPI spec: publish one so agents can generate a client."],
"signals": { "mcpAvailable": true, "cliAvailable": true, "llmsTxt": true, "openapi": false, "sdkLanguages": ["go", "typescript", "python"] }
}querystringrequiredFree-text query matched against name, slug, and company description or categories.
requirementsobjectHard capability filters, all optional booleans: api, mcp, self_serve, openapi,
cli. A product missing a required capability is dropped from results.
curl https://api.stackresolve.dev/v1/search \
-H "content-type: application/json" \
-d '{"query": "payments", "requirements": {"api": true, "mcp": true}}'[
{ "slug": "paddle", "name": "Paddle", "domain": "paddle.com", "agentready": 83 },
{ "slug": "stripe", "name": "Stripe", "domain": "stripe.com", "agentready": 74 }
]taskstringrequiredA plain-English task. One model call parses it into search terms plus requirements, then the registry is searched and ranked by AgentReady Score.
curl https://api.stackresolve.dev/v1/find-tools \
-H "x-api-key: $STACKRESOLVE_API_KEY" \
-H "content-type: application/json" \
-d '{"task": "send transactional email from an agent"}'{
"task": "send transactional email from an agent",
"intent": { "searchTerms": "send transactional email", "requirements": {} },
"results": [{ "slug": "resend", "name": "Resend", "domain": "resend.com", "agentready": 98 }]
}slugsstring[]requiredTwo or more registry slugs to line up. Get slugs from the registry, search, or find-tools.
curl https://api.stackresolve.dev/v1/compare \
-H "content-type: application/json" \
-d '{"slugs": ["stripe", "paddle"]}'{
"fields": ["agentready", "discovery", "understanding", "adoption", "operability", "agent_capability.api", "agent_capability.mcp_available"],
"rows": [
{ "slug": "stripe", "name": "Stripe", "values": { "agentready": 74, "agent_capability.mcp_available": true } },
{ "slug": "paddle", "name": "Paddle", "values": { "agentready": 83, "agent_capability.mcp_available": true } }
]
}#Research primitives
| Method | Path | Metered | Docs |
|---|---|---|---|
| GET | /v1/company?domain= | Yes (workflow_execution) | get_company |
| GET | /v1/pricing?domain= | Yes (workflow_execution) | get_pricing |
| GET | /v1/competitors?domain=&limit= | Yes (workflow_execution) | find_competitors |
| POST | /v1/compare-companies | Yes (workflow_execution) | compare_companies |
| POST | /v1/research | Yes (workflow_execution) | research_company |
curl "https://api.stackresolve.dev/v1/company?domain=resend.com" \
-H "x-api-key: $STACKRESOLVE_API_KEY"curl https://api.stackresolve.dev/v1/research \
-H "x-api-key: $STACKRESOLVE_API_KEY" \
-H "content-type: application/json" \
-d '{"domain": "resend.com", "question": "does it support batch sending?"}'See each primitive page for full parameter tables and response shapes.
#Account and billing
Every endpoint below needs a valid key. See Billing & metering for the full parameter tables and response shapes.
| Method | Path | What it does |
|---|---|---|
| GET | /v1/usage | Usage this billing period, per meter |
| GET | /v1/entitlements | Included, used, and remaining per event type |
| GET | /v1/usage/events | Raw usage events, filterable |
| GET | /v1/limits | Your spend and usage limits |
| PATCH | /v1/limits | Set budget, warning, and hard limits |
| GET | /v1/billing | Plan, spend, and estimated upcoming charge |
| POST | /v1/billing/checkout | Start a Stripe checkout to enable metered billing |
| POST | /v1/billing/portal | Open the Stripe customer portal |
| GET | /v1/billing/invoices | List invoices |
#Vendor claim
| Method | Path | What it does |
|---|---|---|
| POST | /v1/claim | Start a domain claim (DNS TXT or meta tag) |
| POST | /v1/claim/verify | Verify a pending claim |
curl https://api.stackresolve.dev/v1/claim \
-H "x-api-key: $STACKRESOLVE_API_KEY" \
-H "content-type: application/json" \
-d '{"slug": "stripe", "email": "owner@stripe.com", "method": "dns"}'{
"claimId": "b1c2...",
"token": "agentready-verify=9f8e...",
"instructions": "Add a DNS TXT record on stripe.com: \"agentready-verify=9f8e...\", then verify."
}Add the DNS TXT record (or homepage meta tag), then call POST /v1/claim/verify with
{ "slug": "stripe" }. A verified claim turns registry links from nofollow into
canonical followed links.