Skip to main content
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

Every path below is relative to that base. An interactive OpenAPI explorer is published alongside the API at https://api.37audits.com/swagger-ui.html.

Authentication

The API accepts two credential types on the same endpoints, sent as an Authorization: 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 at https://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 9457 application/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

Most users don’t need this endpoint directly — create and revoke keys from https://www.37audits.com/organizations/{orgSlug}/api-keys instead.

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 by run, 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.