BugRater for developers and agents
Program ratings, platform metrics, structured scope and attack surface data, over MCP or plain HTTP. Public data needs
no account. Agents should start with the MCP server and call check_scope
before testing anything.
- /openapi.json
- OpenAPI 3.1 for the REST API, for importers and tool builders.
- /llms.txt
- The short index, in the llms.txt format.
- /llms-full.txt
- This page plus every MCP tool's full description and input schema, in one file.
- /docs.md
- This page as Markdown. Program pages have Markdown versions too, at the same URL with
.mdadded.
MCP server
The easiest way in for an agent. Streamable HTTP, protocol versions 2025-03-26 through 2026-07-28, no account needed for public data. Setup for each client: https://bugrater.com/agents. The tools are listed in full in https://bugrater.com/llms-full.txt.
MCP endpoint. Public tools without a token; member tools with one. JSON-RPC 2.0. Anonymous callers get 40 tool calls a minute per address, token holders 120.
claude mcp add --transport http bugrater https://bugrater.com/mcp
The same server for a signed-in member. Without a token it answers 401 with OAuth metadata, so clients offer sign-in.
claude mcp add --transport http bugrater https://bugrater.com/mcp/account
Open lookups
Small public checks that need no credentials at all.
Is this CVE in the named program's own published advisories?
cvepath, string, required e.g. CVE-2026-12345programquery, string, required Program slug to check the CVE against.
Returns
verdictmatched, mismatch (credited to another vendor), unknown, or malformedvendorsVendors BugRater has it credited toreleaseThe advisory, when matched
curl 'https://bugrater.com/api/v1/cve/CVE-2026-12345?program=gitlab'
Every published vendor-advisory credit for a researcher name.
namequery, string, required The name as advisories credit it.
Returns
totalcredits, cves, vendors, first and latest datebyVendorPer-vendor countscvesUp to 30 most recent CVEsprofileThe BugRater member, when the name is a verified claim
curl 'https://bugrater.com/api/v1/researcher-credits?name=Jane%20Doe'
Verify a BugBadge attestation attached to a report.
tokenpath, string, required The 40-character attestation token.
Returns
statusvalid, expired, revoked or badge_revokedresearcherusername, profile and badge linkssnapshotThe track record at minting timeminted_forThe program it was minted for; check it is yoursdistinct_verifiersHow widely the token has travelled
curl https://bugrater.com/api/v1/verify/0123456789abcdef0123456789abcdef01234567
A member's published end-to-end public key (P-256 JWK) and fingerprint, to encrypt collab content to them.
usernamepath, string, required BugRater username.
Directory API
Programs, grades and reviews as JSON. Self-serve: create an agent token at https://bugrater.com/settings/agents and send it as a bearer token. 60 requests a minute.
Every program, best graded first.
limitquery, integer Rows to return, 1 to 100. Default 50.offsetquery, integer Rows to skip. Default 0.
Returns
data[]slug, name, company, platform, type, bounty_low, bounty_high, grade, score, reviews, urltotal, has_moreFor paging
curl -H 'Authorization: Bearer $BUGRATER_TOKEN' 'https://bugrater.com/api/v1/programs?limit=20'
One program with its review metrics, reported practices and up to 100 reviews.
slugpath, string, required Program slug, as in /programs/{slug}.
Returns
data.metricswould_submit_again_pct, would_recommend_pct, avg_skill, median_first_response, sentimentdata.reported_practicesPractice flag countsdata.reviews[]Review text, ratings, outcomes; anonymous authors are null
Graded programs ranked on one board.
boardquery, string graded (default), triage, payers or cves.limitquery, integer Rows to return, 1 to 100. Default 50.offsetquery, integer Rows to skip. Default 0.
Site-wide totals and the grade distribution.
One approved review.
idpath, integer, required Review id.
Attack Surface API
Enumerated subdomains, HTTP probes and exposure signals per program, priced per call. Pay with an Attack Surface subscription key (https://bugrater.com/attack-surface). Paying per call with x402 is switched off for now, so every call needs a key. Full field lists: https://bugrater.com/attack-surface/api-docs.
The board: every rated program with its rating, surge and crowd read.
sortquery, string score (default), surge, velocity or hunters.pagequery, integer Default 1.limitquery, integer Default 50.
What is heating up, and what is under-hunted while still active.
The freshest high-value signals across every program.
typequery, string A signal type, e.g. staging_env, exposed_config, login_page or admin_panel. An unknown type is a free 400 that lists the valid ones.severityquery, string info, low, medium or high.pagequery, integer Default 1.limitquery, integer Default 50.
One program: rating and drivers, market read, enumeration depth.
idpath, integer, required Attack Surface program id, from /api/v1/surface/programs.
Enumerated subdomains with DNS, liveness and attached signals.
idpath, integer, required Attack Surface program id, from /api/v1/surface/programs.
curl -i https://bugrater.com/api/v1/surface/programs/42/subdomains -H 'X-API-Key: bsk_live_…'
HTTP probes: status, title, server, tech fingerprint, TLS issuer.
idpath, integer, required Attack Surface program id, from /api/v1/surface/programs.
Exposure signals on one program, highest severity first.
idpath, integer, required Attack Surface program id, from /api/v1/surface/programs.
Daily intake series.
idpath, integer, required Attack Surface program id, from /api/v1/surface/programs.daysquery, integer Window, default 90.
Everything for one program in a single call.
idpath, integer, required Attack Surface program id, from /api/v1/surface/programs.
Sign-in for MCP clients
OAuth 2.1 as the MCP authorization spec profiles it: dynamic client registration, public clients, PKCE S256. Clients discover all of it from the 401 on /mcp/account.
Protected resource metadata (RFC 9728). Also at /mcp and /mcp/account suffixes.
Authorization server metadata (RFC 8414).
Dynamic client registration (RFC 7591). Public clients only.
Authorization endpoint. The member signs in and consents.
Code exchange with code_verifier. Returns a 90-day bearer token.
Paying with x402
x402 pay-per-call is not switched on here yet, so Attack Surface calls need a subscription key for now. When it is on, this is how it works.
- Call a paid endpoint with no key. It answers 402 Payment Required with a PAYMENT-REQUIRED header (x402 v2, base64 JSON) and the v1 offer in the body.
- Sign an EIP-3009 USDC authorisation for exactly the amount in accepts[0], to its payTo.
- Repeat the request with PAYMENT-SIGNATURE (v2) or X-PAYMENT (v1). BugRater verifies it, settles it on chain through the facilitator, and answers 200 with PAYMENT-RESPONSE carrying the transaction.
- Each authorisation buys one response. A replay is refused, and nothing is delivered unless settlement succeeds.
- Over MCP, the attack_surface tool does the same: its first answer is the PaymentRequired object, and the retry carries the payment in _meta["x402/payment"]. The settlement comes back in result._meta["x402/payment-response"].
Limits and errors
- Every error is JSON with
ok: falseand anerrorsentence that says what to change. - 401 means missing or invalid credentials, 402 payment required, 404 not found (not charged), 429 rate limited with
Retry-After. - MCP tool failures come back as tool results with
isError: true, written for the model to act on. - Scope, payouts and response targets are the platforms' own figures, copied on the date each answer gives. The program's policy page is the authority.
Use of the API is covered by the terms and privacy policy.