Authentication

The REST API under /api/v1 always requires a key. The MCP server and the scan on the homepage also work without one, with a lower limit. A key is free and raises the limit. Full reports require a key from an account on Business.

Sending your key

The key works like a password for programs. Send it with every request in the Authorization header, after the word Bearer. Live keys start with sc_live_, followed by 32 characters.

Header
Authorization: Bearer sc_live_…

Store it in an environment variable, not in your code. We only keep a hash of it, so you see the full key exactly once, right after you create it.

Terminal
export HULLWISE_API_KEY="sc_live_…"
curl "https://hullwise.co/api/v1/scan?url=example.com" \
  -H "Authorization: Bearer $HULLWISE_API_KEY"

Getting a key

Sign in and open API keys in your account. That is where you create new keys and revoke old ones. A revoked key stops working immediately.

For a first try, there is the test key sc_test_demo. It works without an account and has the limit of free access. Everyone who uses it shares that limit, and the report is always shortened. For real work, use your own key.

Without a key

Two routes work without a key. The REST API is not one of them.

  • The MCP server at https://hullwise.co/mcp. Without a header, the limit is 20 checks per hour per IP address. With a key, the limit of your access applies. An invalid key returns status 401. The server does not fall back to keyless access in that case.
  • The homepage endpoint GET /api/scan. It is meant for the browser and counts per IP address or, when you are signed in, per account. Details are in the API reference.

Shortened or full report

How much the report contains depends on the plan of the account the key belongs to. The shortening happens on our server, so locked findings never leave it.

AccessReport
No key (MCP, homepage)Shortened, 2 findings in full
Test key sc_test_demoShortened, 2 findings in full
Free key or accountShortened, 2 findings in full
BusinessFull, every finding with ID, text and sources

How to recognize a locked finding in the JSON is described in the API reference.

Limits

Every request counts within a one-hour window. The window starts with the first request. On the MCP server, every tool call counts.

AccessWhereChecks per hour
No keyMCP, homepage (per IP)20
Free key or accountAPI, MCP, homepage when signed in100
BusinessAPI, MCP, homepage when signed in2,000

The limits are there to slow down abuse and are not counted to the exact request. Plan your load with some headroom below the limit and always handle status 429.

Rate limit headers

Every REST API response to a request with a valid key tells you how much is left.

HeaderMeaning
X-RateLimit-LimitChecks allowed in the current window
X-RateLimit-RemainingHow many of those are left
X-RateLimit-ResetWhen the window restarts, as Unix time in seconds

Once the limit is reached, you get status 429 with the code rate_limited. Wait until the time in X-RateLimit-Reset, then try again. The MCP server reports the same as a tool error with the text rate_limited. All codes are listed under Errors.

Is your app
watertight?

Hullwise finds the leaks before someone else does: exposed keys, database credentials and outdated software. Every finding comes with steps to fix it.

https://

Click a finding to mark it as fixed.

See pricingHow a scan works

Ship fast. Stay hullwise.