REST API — the same read/write path the 37audits.com website uses for organizations, projects, monitored URLs, and project software, plus a read-only view of audit results and the auditor catalog, and an endpoint to trigger a fresh audit run.
One data layer
The REST API, the MCP server, and the website share the same authorization and data layer — a caller only ever sees organizations they belong to.
Mostly read/write
Organizations, projects, monitored URLs, and project software are full CRUD. Audit results, findings, and the auditor catalog are read-only — they’re written by the background auditor pipeline, not through this API.
Base URL
https://api.37audits.com/swagger-ui.html.
Authentication
The API accepts two credential types on the same endpoints, sent as anAuthorization: Bearer <token> header or an x-api-key header:
Bearer token (website sessions)
The same Supabase access token used to sign in to 37audits.com. The API verifies it as an ES256 JWT against Supabase’s JWKS endpoint. This is what the website itself sends, and what an MCP client obtains via the OAuth flow.API key (programmatic access)
For scripts and server-to-server calls, create a key athttps://www.37audits.com/organizations/{orgSlug}/api-keys — organization admins only — and send it as x-api-key instead of a bearer token. The key identifies the user who created it and is scoped to one organization and role. The raw key is shown once, at creation time, prefixed tsa_live_ copy it then, it can’t be retrieved again.
The same operation is available as POST /organizations/{organizationId}/api-keys (see below) if you’d rather script key creation than use the page.
Errors
Failures are returned as RFC 9457application/problem+json bodies:
Any organization member can read projects, monitored URLs, project software, audit results, and the auditor catalog. Only organization owners/admins can create, update, or delete projects, monitored URLs, and project software — a member without that role gets
403 on write, since the resource is already visible to them (unlike a non-member, who gets 404). Audit results and findings have no write path at all, for anyone.
Organizations
API keys
Projects
Monitored URLs
status is one of draft, active, disabled. Basic-auth credentials are write-only: settable on create/update, never returned in a response — a hasBasicAuth boolean on the response indicates whether they’re set.
Project software
Auditors
Audit results
Read-only end to end — these rows are written by the background auditor pipeline (or byrun, below), never through a create/update/delete call.
Running audits
This is the one write path into audit results, and the only billable call in the API — it’s the same “run all auditors” action the website triggers client-side, just server-side. It pre-flight-checks the resolved auditor(s)’ cost against the organization’s credit balance and returns
402 Payment Required if insufficient; credits are deducted only for auditors that actually complete, so a failed auditor isn’t charged. Any organization member can trigger a run — unlike the other write paths above, it isn’t restricted to owners/admins. The equivalent MCP tool is run_audits.