Skip to content

REST API overview

Everything the dashboard does is available under /api/v1, and the Agent, the plugins and the reporting scripts use the same API. This page covers the conventions that apply to every call; the interactive reference lists each route.

Where the API lives

Host Serves Typical caller
Your workspace address - https://<slug>.app.certin.tel or your own vanity domain - plus /api/v1 The whole API and the dashboard. Browser sessions, integration keys, scripts that read the inventory.
The ingest host https://api.certin.tel Only the routes an Agent or reporting script needs: POST /api/v1/renewals, /checkins, /internal-certs, /agents/heartbeat, /agents/capabilities, /agents/workflow-assignments and …/{id}/status (Agent 1.3.95 and later), /agents/unregister, /internal-endpoints/claim and …/{id}/result, /crl-monitors/report, /private-cas/{id}/issue, the …/agent/all listings, /install-tokens/exchange, /dns-delegations/{id}/txt, /acme-dns/update, /api/v1/auth/me, /api/v1/releases, /api/v1/meta, /api/v1/version and the public /pki/ publication paths. No dashboard, no sign-in, no inventory reads. Agents, ACME clients and scanners that must keep working even when the dashboard sits behind an IP allowlist.

The ingest host is never filtered by the workspace IP allowlist; the workspace address is, unless Settings → Security allows ingest from any IP. Use the exact base URL shown on the Install Tokens, API Keys or Delegated DNS-01 page rather than deriving one.

Interactive reference

Sign in to your workspace and open API docs from the account menu, or go to /api/v1/docs (Swagger UI) or /api/v1/redoc; the schema is at /api/v1/openapi.json. The reference is generated from the running platform, so it always matches the deployed version. Demo accounts are redirected away from it. GET /api/v1/meta (no authentication) returns the product version, build, deployment mode and capability flags; GET /api/v1/version adds the database schema status.

Authentication

  • API keys are presented as <prefix>.<secret> in either the X-Api-Key header or Authorization: Bearer <prefix>.<secret>. What a key may do is decided by its scope and organization binding; see API keys & authentication. A wrong, revoked or expired key always gets the same 401.
  • Browser sessions from the dashboard can call the API too (the API docs page relies on this). POST /api/v1/auth/login starts a session for a local account and is throttled like the sign-in page (10 attempts per minute per address and email, 30 per address, and a 15-minute lockout after eight consecutive failures); single sign-on users sign in through the dashboard. For an account with two-factor sign-in, the answer has mfa_required: true and the session can only call POST /api/v1/auth/mfa/verify (with code or recovery_code), GET /api/v1/auth/me and POST /api/v1/auth/logout until the code is verified; every other call answers 403 with mfa-required.
  • GET /api/v1/auth/me describes the current principal: the tenant, the organizations it can act in, its permissions, and for a reporting key the reporting_organization_id its submissions land in. It is the quickest way to check a new key.
curl https://<slug>.app.certin.tel/api/v1/auth/me \
  -H "X-Api-Key: cik_<prefix>.<secret>"

Pagination

List routes use keyset pagination:

Query parameter Meaning
limit Rows per page, 1–200, default 50.
cursor The opaque meta.next_cursor from the previous page; omit for the first page. It is signed - do not construct or decode it.
sort, order Field to sort by and asc / desc (default desc) where the route supports it.

Responses carry the rows in items and a meta object with limit, next_cursor and has_more; stop when has_more is false.

Errors

Every error is an RFC 9457 problem document with Content-Type: application/problem+json:

{
  "type": "https://certin.tel/problems/not-found",
  "title": "Not Found",
  "status": 404,
  "detail": "…",
  "request_id": "…",
  "errors": [{"field": "…", "message": "…"}]
}

errors appears only on validation failures (422). Quote the request_id when you report a problem. A resource that exists in another tenant or organization answers 404, never 403, so an id cannot reveal what exists elsewhere; see troubleshooting. A 429 (…/problems/rate-limited) carries a Retry-After header; wait that long before retrying.

Resource families

Prefix What it covers Guide
/auth Session login/logout, password change, me, and the second sign-in step POST /auth/mfa/verify. this page, Two-factor sign-in
/organizations, /users, /roles, /permissions Organization tree, users, built-in and custom roles, the permission catalogue. POST /users/{user_id}/mfa/reset removes a user's two-factor sign-in (users.update, 204). Organizations, users & roles, Two-factor sign-in
/api-keys, /install-tokens Integration and Agent keys, install tokens and the exchange route. POST /install-tokens/one-time (platform builds after 2026.10.28) mints a one-time token (expires_in_minutes 15, 60, 240 or 1440; the 201 answer carries the secret once, with Cache-Control: no-store); token responses include kind (organization / one_time) and used_at, and reveal, rotate and reactivate answer 409 for a one-time token. API keys, Install tokens
/certificates, /ct-findings, /targets The inventory, Certificate Transparency findings, public endpoint monitors. A certificate carries renewal_schedule (planned renewal, basis, ARI window, deployment state) when its managing Agent reports one. A CT finding carries issued_by_certintel, in_inventory and new_name_set. GET/POST /targets/{target_id}/certificate-links and DELETE /targets/{target_id}/certificate-links/{link_id} list, add and remove an endpoint's links to managed certificates (targets.read / targets.update). A target carries a tls block (grade, reasons, versions, cipher, key exchange group, post-quantum badge, chain, assessment time) and a writable probe_legacy_tls, on a platform build that offers TLS grades. Certificates, TLS grade, CT Log Watch
/trusted-cas Trust anchors and the ignore list (ignored.json is public). Trusted CAs
/private-cas and /pki/{ca_id}/… Issuing CAs, issuance, export, revocation and the public CRL publication. Where offered: POST /private-cas/{ca_id}/rotate (Rotate now, private_ca.update, 202), auto_rotate on PATCH, and GET /private-cas/{ca_id}/trust (per-host root trust, private_ca.read). Private CA
/renewals, /checkins, /internal-certs Reporting from ACME clients and scanners. A renewal read carries failure_output (a failed installation step and the redacted end of its output) and deployment_window_override when the Agent reported them. ACME check-ins & renewals, Internal certificate scanners
/agents, /internal-endpoints, /adcs-templates, /crl-monitors Enrolled Agents, platform-assigned endpoint checks, AD CS template and CRL distribution point monitors. Where offered, GET /agents lists Agents with agent_version, config_locked, outdated, latest_version and (with agent_updates.read) the live update_request (agents.read, ?outdated=true), and POST /agents/{api_key_id}/sealing-key/approve approves an Agent's new sealing key (platform_credentials.update, 204). Monitors & internal endpoints, CRL monitoring, Install tokens & the Agents page
/agent-updates Update requests for Agent 1.5.0 and later: GET lists them, POST with api_key_ids (up to 500) or all_outdated: true and an optional target_version creates them (201; Agents that cannot take one are listed as skipped), DELETE /agent-updates/{id} cancels a request the Agent has not received yet (agent_updates.read / .create / .delete). The device decides whether to install. Install tokens & the Agents page
/platform-credentials Appliance credentials for remote deployment: GET (list, one), POST (201), PATCH (rename or replace the secret), DELETE (204). Secrets are write-only and never returned (platform_credentials.*). Platform credentials
/msp/organizations MSP mode: per client organization, expiring, expired, renewal_failures_7d, served_mismatches, offline_agents and ct_new_name_sets (workspace-wide users, Enterprise msp). Organizations, users & roles
/dns-delegations and /acme-dns/update Delegated DNS-01 records and TXT updates. Delegated DNS-01
/workflow-assignments Certificate workflows proposed to one Agent from a bundled template (POST to create with api_key_id, template, variables, certificate (a challenge other than {"type": "dns-01"} is refused with 422: HTTP-01 was removed; for a Private CA issuer and Agent 1.5.0, an optional private_ca_profile and empty domains with ip_addresses; an IP address in an ACME certificate's domains is 422), issuer, issue_now, note, expires_in_days and an optional deployment_window; a credential variable is local or platform:<id> (needs platform_credentials.read), never a value; 422 when the Agent does not report the feature; GET lists with cursor pagination and shows the timeline; …/{id}/resend, …/{id}/cancel, DELETE for finished ones). The Agent's own routes are PUT /agents/capabilities, GET /agents/workflow-assignments and POST /agents/workflow-assignments/{id}/status. workflow_assignments.* permissions. Dashboard-assigned workflows
/notification-channels, /scheduled-reports, /alert-contacts Alert destinations (an email destination takes up to 50 contact_ids), periodic report emails, and alert contacts (GET/POST /alert-contacts, PATCH/DELETE /alert-contacts/{id}; alert_contacts.read / .update; reads say whether the address unsubscribed). Alerts & notifications
/oidc/providers Identity providers for single sign-on. OIDC / SSO overview
/releases Public release records for the Agent and plugins. Downloads
/activity, /jobs The activity log and background jobs. -

Routes used only by the platform console are not part of the published schema.