{"openapi":"3.0.3","info":{"title":"StackResolve API","version":"0.1.0","description":"Software intelligence and resolution for AI agents: discovery, evaluation, and structured research. Includes the AgentReady Score."},"servers":[{"url":"https://api.stackresolve.dev"}],"security":[{"apiKey":[]}],"components":{"securitySchemes":{"apiKey":{"type":"apiKey","in":"header","name":"x-api-key","description":"Send your key as the x-api-key header. Create one programmatically at POST /v1/account/keys. Registry reads need no key."}},"schemas":{"Error":{"type":"object","required":["error"],"properties":{"error":{"type":"string","description":"Human-readable error message an agent can map to a recovery action"}}},"Scores":{"type":"object","properties":{"agentready":{"type":"integer"},"discovery":{"type":"integer"},"understanding":{"type":"integer"},"adoption":{"type":"integer"},"operability":{"type":"integer"}}},"AuditReport":{"type":"object","properties":{"slug":{"type":"string"},"domain":{"type":"string"},"name":{"type":"string"},"scores":{"$ref":"#/components/schemas/Scores"},"issues":{"type":"array","items":{"type":"string"}}}},"RegistryRow":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"},"domain":{"type":"string"},"agentready":{"type":"integer"}}},"CompanyRecord":{"type":"object","properties":{"name":{"type":"string"},"domain":{"type":"string"},"description":{},"freshness":{"type":"object"},"cached":{"type":"boolean"}}},"ApiKey":{"type":"object","properties":{"key":{"type":"string","description":"The raw key, returned once"},"id":{"type":"string"}}}}},"paths":{"/v1/audit":{"get":{"summary":"Audit a product","operationId":"audit","parameters":[{"name":"domain","in":"query","required":true,"schema":{"type":"string"},"example":"firecrawl.dev"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuditReport"},"example":{"slug":"firecrawl","domain":"firecrawl.dev","name":"Firecrawl","scores":{"agentready":96,"discovery":94,"understanding":98,"adoption":97,"operability":95},"issues":[]}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"domain is required"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"a valid API key is required for this endpoint"}}}},"429":{"description":"Rate limited; retry after the Retry-After header","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"rate limit exceeded"}}}}}}},"/v1/registry":{"get":{"summary":"List registry","operationId":"listRegistry","parameters":[{"name":"category","in":"query","schema":{"type":"string"}},{"name":"minScore","in":"query","schema":{"type":"integer"}},{"name":"limit","in":"query","schema":{"type":"integer"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/RegistryRow"}},"example":[{"slug":"stripe","name":"Stripe","domain":"stripe.com","agentready":92}]}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"domain is required"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"a valid API key is required for this endpoint"}}}},"429":{"description":"Rate limited; retry after the Retry-After header","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"rate limit exceeded"}}}}}}},"/v1/profile/{slug}":{"get":{"summary":"Get profile","operationId":"getProfile","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"},"example":"stripe"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuditReport"},"example":{"slug":"stripe","domain":"stripe.com","name":"Stripe","scores":{"agentready":92,"discovery":90,"understanding":95,"adoption":90,"operability":93},"issues":[]}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"domain is required"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"a valid API key is required for this endpoint"}}}},"429":{"description":"Rate limited; retry after the Retry-After header","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"rate limit exceeded"}}}}}}},"/v1/search":{"post":{"summary":"Search tools","operationId":"search","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["query"],"properties":{"query":{"type":"string"},"requirements":{"type":"object"}}},"example":{"query":"web scraping","requirements":{"mcp":true}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/RegistryRow"}}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"domain is required"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"a valid API key is required for this endpoint"}}}},"429":{"description":"Rate limited; retry after the Retry-After header","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"rate limit exceeded"}}}}}}},"/v1/find-tools":{"post":{"summary":"Find tools for a task","operationId":"findTools","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["task"],"properties":{"task":{"type":"string"}}},"example":{"task":"send transactional email from a Node service"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"domain is required"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"a valid API key is required for this endpoint"}}}},"429":{"description":"Rate limited; retry after the Retry-After header","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"rate limit exceeded"}}}}}}},"/v1/compare":{"post":{"summary":"Compare products","operationId":"compare","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["slugs"],"properties":{"slugs":{"type":"array","items":{"type":"string"}}}},"example":{"slugs":["exa","tavily"]}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"domain is required"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"a valid API key is required for this endpoint"}}}},"429":{"description":"Rate limited; retry after the Retry-After header","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"rate limit exceeded"}}}}}}},"/v1/company":{"get":{"summary":"Get company","operationId":"getCompany","parameters":[{"name":"domain","in":"query","required":true,"schema":{"type":"string"},"example":"stripe.com"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompanyRecord"},"example":{"name":"Stripe","domain":"stripe.com","description":"Payments infrastructure for the internet.","freshness":{},"cached":true}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"domain is required"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"a valid API key is required for this endpoint"}}}},"429":{"description":"Rate limited; retry after the Retry-After header","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"rate limit exceeded"}}}}}}},"/v1/pricing":{"get":{"summary":"Get pricing","operationId":"getPricing","parameters":[{"name":"domain","in":"query","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"domain is required"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"a valid API key is required for this endpoint"}}}},"429":{"description":"Rate limited; retry after the Retry-After header","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"rate limit exceeded"}}}}}}},"/v1/plans":{"get":{"summary":"Get StackResolve pricing","operationId":"getPlans","description":"Our own plans, free quotas, and per-call rates, derived live from billing config so they are never stale. No API key required.","security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object"},"example":{"currency":"USD","registryReadsFree":true,"plans":[{"key":"free","name":"Free","description":"Free allowance, no card required"},{"key":"usage","name":"Usage","description":"Pay-as-you-go metered usage"}],"primitives":[{"eventType":"agent_discovery_check","ratePerCallUsd":0.005,"ratePer1kUsd":5,"freeMonthly":100}],"generatedAt":"2026-08-21T00:00:00.000Z"}}}}}}},"/v1/competitors":{"get":{"summary":"Find competitors","operationId":"findCompetitors","parameters":[{"name":"domain","in":"query","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"domain is required"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"a valid API key is required for this endpoint"}}}},"429":{"description":"Rate limited; retry after the Retry-After header","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"rate limit exceeded"}}}}}}},"/v1/research":{"post":{"summary":"Research a company","operationId":"research","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["domain"],"properties":{"domain":{"type":"string"},"question":{"type":"string"}}},"example":{"domain":"vercel.com","question":"What do they charge for bandwidth?"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"domain is required"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"a valid API key is required for this endpoint"}}}},"429":{"description":"Rate limited; retry after the Retry-After header","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"rate limit exceeded"}}}}}}},"/v1/account/keys":{"post":{"summary":"Create an API key","description":"Mint a new API key for the authenticated workspace. The raw key is returned once. This is how an agent provisions its own credential.","operationId":"createApiKey","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"label":{"type":"string"}}},"example":{"label":"my-agent"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKey"},"example":{"key":"sk_live_9f3c...redacted","id":"key_123"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"domain is required"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"a valid API key is required for this endpoint"}}}},"429":{"description":"Rate limited; retry after the Retry-After header","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"rate limit exceeded"}}}}}}}}}