Skip to main content

API reference

Complete endpoint catalog, grouped by resource. Each row lists the route, method, minimum role, and a cross-link to the feature page that describes the semantics + request / response bodies. For the auth + conventions, see Overview and Authentication.

In-app API docs

The running application ships an interactive API reference at /api-docs (in the web UI, under Help) with request/response examples for every endpoint. This page is a human-readable index of the same surface.

Authentication & user

MethodPathRoleSee
POST/auth/loginanonymousLogin
POST/auth/logoutanyLogout
POST/auth/refreshanyRefresh flow
GET/auth/meanyWho am I
POST/auth/otp/verifyanonymous (OTP session)2FA
POST/auth/totp/setup, /auth/totp/verify-setupany (self)2FA
GET/auth/totp/statusany (self)2FA
POST/auth/totp/disable, /auth/totp/recovery-codesany (self)2FA

Organisation / admin

MethodPathRoleSee
GET/POST/users, PUT /users/{id}/rolesownerUsers
GET/PUT/settings/ldapownerLDAP
GET/PUT/settings/syslogadminSyslog
GET/PUT/settings/generaladmin
GET/PUT/settings/licenseadminLicense
PUT/settings/license/api-keyadminLicense
PUT/DELETE/settings/license/offlineadminLicense
POST/settings/license/validateadminLicense
GET/license/statusanyLicense status
GET/audit-logsadmin (org scope). The project-scoped /projects/{id}/audit-logs and its /export are readable by any project viewer.Audit logs
GET/audit-logs/exportadminAudit export
GET/POST/PATCH/DELETE/organizations (& /organizations/{id})GET: any authenticated user · writes: admin
GET/POST/PATCH/DELETE/projects (& /projects/{id})create and delete: owner · edit: project admin
GET/ca-providersviewercatalogue of ACME CAs the backend knows by default

Project — CA providers

MethodPathRoleSee
GET/POST/PATCH/DELETE/projects/{projectId}/acme-accountsread: viewer · writes: adminACME accounts
POST/projects/{projectId}/acme-accounts/{id}/validateadminre-check CA connection
GET/projects/{projectId}/acme-accounts/{id}/usageviewercerts referencing this account
GET/POST/PATCH/DELETE/projects/{projectId}/msca-connectionsread: viewer · writes: adminMSCA
POST/projects/{projectId}/msca-connections/{id}/sync-templatesadminrefresh the template catalogue
POST/projects/{projectId}/msca-connections/{id}/testadminprobe CES / CEP

Project — DNS

MethodPathRoleSee
GET/POST/PATCH/DELETE/projects/{projectId}/dns-credentialsread: viewer · writes: adminDNS providers
POST/projects/{projectId}/dns-credentials/{id}/testadminsmoke-test the credential
GET/POST/PATCH/DELETE/projects/{projectId}/zonesread: viewer · writes: adminZones
GET/projects/{projectId}/zones/{id}/rate-limitsviewerweekly budget + projection

Project — certificates

MethodPathRoleSee
GET/POST/PATCH/DELETE/projects/{projectId}/certificatesviewer (list) / operator (mutate)Issue
POST/projects/{projectId}/certificates/importadminImport
POST/projects/{projectId}/certificates/{id}/reimportadminImport
POST/projects/{projectId}/certificates/{id}/renewoperatorRenew
POST/projects/{projectId}/certificates/{id}/reissueoperatorReissue
POST/projects/{projectId}/certificates/{id}/revokeadminRevoke
POST/projects/{projectId}/certificates/{id}/downloadoperatorReturns the payload directly; optional {"artifact_id"} selects a retained version — Download
POST/projects/{projectId}/certificates/{id}/validate-manual-dnsoperatorManual DNS
GET/projects/{projectId}/certificates/{id}/eventsviewerTimeline
GET/projects/{projectId}/certificates/{id}/jobsviewerjobs scoped to this cert
GET/projects/{projectId}/certificates/{id}/dependenciesviewerDependencies
GET/projects/{projectId}/certificates/{id}/riskviewerRisk
GET/PUT/DELETE/projects/{projectId}/certificate-policyoperatorPolicy

Project — distribution

MethodPathRoleSee
GET/POST/PATCH/DELETE/projects/{projectId}/modulesoperatorModules
POST/projects/{projectId}/modules/{id}/healthadminlive health check
POST/projects/{projectId}/module-browse/{moduleType}/{kind}operator with a saved target_id; admin for an inline spec or a credential_id other than the target's ownlive pickers (IIS sites / bindings / app-pools / placement-preview, Kubernetes namespaces / secrets / workloads, Vault mounts / secrets, Azure Key Vault certificates, Exchange servers, MerlinCDN distributions / canonical-names); read-only, 60/min per project, 500 rows max (IIS, Kubernetes, Vault, Azure Key Vault, Exchange)
GET/POST/PATCH/DELETE/projects/{projectId}/credentialsread: viewer · writes: admin (they hold secrets)Module creds
POST/projects/{projectId}/credentials/{id}/testadminresolve the credential; reports its shape, never its value
GET/projects/{projectId}/secret-stores · /{id} · /typesviewerExternal secret stores
POST/PATCH/DELETE/projects/{projectId}/secret-stores[/{id}]admina store holds the connection to your secret manager
POST/projects/{projectId}/secret-stores/{id}/testadminlive connectivity + auth check
GET/POST/PATCH/DELETE/projects/{projectId}/targetsoperatorTargets
GET/POST/PATCH/DELETE/projects/{projectId}/target-groupsoperatorTarget groups
GET/POST/PATCH/DELETE/projects/{projectId}/path-setsoperatorPath sets
GET/POST/PATCH/DELETE/projects/{projectId}/action-setsoperatorAction sets
POST/projects/{projectId}/action-sets/lintoperatortemplate-variable lint
GET/POST/PATCH/DELETE/projects/{projectId}/variablesoperatorVariables
GET/POST/PATCH/DELETE/projects/{projectId}/certificates/{id}/distributionsoperatorattach / edit. The list response omits last_target_results (up to 200 per-target subdocs per row)
GET.../distributions/{id}viewerone distribution with its full last_target_results history
POST.../distributions/{id}/executeoperatorrun now
POST.../distributions/{id}/dry-runoperatorpreview actions
GET.../distributions/{id}/rollback-candidatesviewerlist retained versions + eligibility (Rollback)
POST.../distributions/{id}/rollbackoperatoroptional {"artifact_id"} body; 409 when unavailable; rate-limited to 5 requests/minute per project (Rollback)

Project — discovery

MethodPathRoleSee
GET/POST/PATCH/DELETE/projects/{projectId}/discovery-sourcesread: viewer · writes: adminSources
POST.../discovery-sources/{id}/scanoperatortrigger immediate scan
GET/projects/{projectId}/discovery/certificatesviewerInventory
GET/projects/{projectId}/discovery/endpointsviewerendpoint-level list (edge_role = edge / origin on rows from a proxied cloud-DNS record)
GET/PATCH/projects/{projectId}/discovery/findings (& /{id})viewer (list) / operator (status)Findings
GET.../discovery/certificates/{fingerprint}/manageoperatorManage
GET/projects/{projectId}/discovery/summaryviewerdashboard numbers

Project — notifications

MethodPathRoleSee
GET/POST/PATCH/DELETE/projects/{projectId}/notification-channelsadminChannels
POST.../notification-channels/{id}/testadmindelivery probe
GET/POST/PATCH/DELETE/projects/{projectId}/notification-rulesadminRules
GET/notification-templates, /notification-templates/defaultsanyTemplates
POST/PATCH/DELETE/notification-templates, /notification-templates/{id}adminTemplates
GET/projects/{projectId}/notification-historyviewerHistory

Project — operations

MethodPathRoleSee
GET/projects/{projectId}/jobsviewerJobs
GET/projects/{projectId}/jobs/{id}viewerjob detail
GET/projects/{projectId}/jobs/{id}/logsviewerstream logs
POST/projects/{projectId}/jobs/{id}/retryadminretry a failed job
POST/projects/{projectId}/jobs/{id}/canceladmincancel a pending / in-progress job
GET/POST/DELETE/projects/{projectId}/domain-trackings, /{id} (no PATCH)operator to writeDomain tracking
POST.../domain-trackings/{id}/checkoperatortrigger WHOIS refresh
GET/POST/projects/{projectId}/bulk-actionsoperatorBulk
GET/projects/{projectId}/approval-requestsproject adminApprovals
GET/approval-requests/my, /approval-requests/{id}anyApprovals
POST/approval-requests/{id}/{approve,reject,execute,retry,cancel}scoped by actionApprovals
GET/downloads/{token}authenticated (token bearer)Not project-scoped. Redeems the single-use token minted when an approved download request is executed — Download

Project — dashboards

MethodPathRoleSee
GET/projects/{projectId}/dashboard/summaryviewerSummary
GET/projects/{projectId}/dashboard/trendsviewertime-series renewals / distributions
GET/projects/{projectId}/dashboard/readiness-47dayviewer47-Day

Encryption & KEK

KEK mutations are CLI-only by design — nothing over HTTP can start, cancel or undo a rotation. See CLI → kek. One read-only endpoint exists, and it is what Settings → KEK Versions renders:

MethodPathRolePurpose
GET/settings/kek-statusadminKeystore versions with per-version record counts and fleet load-state, the active and recent rotations, fleet mismatch, and keystore drift. See KEK rotation.

record_count is nullable: null means the count could not be taken, which is not the same as 0.

In-app API docs

The web UI ships an interactive API reference at /api-docs — every endpoint with its parameters, roles, and example payloads, always matching the running version. There is currently no machine-readable OpenAPI export; script against the endpoint tables above using a Bearer access token.

See also