API Reference

TLS Certificate API

TLS certificate lifecycle — certificates, certificate authorities, ACME, and TLS profiles. Auto-generated from the platform OpenAPI schema so it matches the running API.

REST API for this feature — 76 operations across 48 resource paths, auto-generated from the platform's live OpenAPI schema (drf-spectacular).

Base URL https://<your-versus-host>/api · Auth Authorization: Bearer <JWT> (from POST /api/auth/token/) · 📄 Download the OpenAPI spec for Postman/Insomnia/Swagger · see the API overview for pagination, filtering, and errors.

Acme server

GET /api/acme-server/accounts/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
caquerynointeger
orderingquerynostringWhich field to use when ordering the results.
pagequerynointegerA page number within the paginated result set.
page_sizequerynointegerNumber of results to return per page.
searchquerynostringA search term.
statusquerynostring* valid - Valid

Responses: 200 → PaginatedAcmeAccountList

GET /api/acme-server/accounts/{id}/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
idpathyesintegerA unique integer value identifying this acme account.

Responses: 200 → AcmeAccount

POST /api/acme-server/accounts/{id}/deactivate/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
idpathyesintegerA unique integer value identifying this acme account.

Request body (application/json): AcmeAccountRequest

Responses: 200 → AcmeAccount

GET /api/acme-server/ca/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
orderingquerynostringWhich field to use when ordering the results.
pagequerynointegerA page number within the paginated result set.
page_sizequerynointegerNumber of results to return per page.
searchquerynostringA search term.

Responses: 200 → PaginatedInternalCAList

POST /api/acme-server/ca/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

Request body (application/json): InternalCARequest

Responses: 201 → InternalCA

GET /api/acme-server/ca/{id}/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
idpathyesintegerA unique integer value identifying this Internal CA.

Responses: 200 → InternalCA

PUT /api/acme-server/ca/{id}/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
idpathyesintegerA unique integer value identifying this Internal CA.

Request body (application/json): InternalCARequest

Responses: 200 → InternalCA

PATCH /api/acme-server/ca/{id}/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
idpathyesintegerA unique integer value identifying this Internal CA.

Request body (application/json): PatchedInternalCARequest

Responses: 200 → InternalCA

DELETE /api/acme-server/ca/{id}/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
idpathyesintegerA unique integer value identifying this Internal CA.

Responses: 204

GET /api/acme-server/ca/{id}/ca_cert/

Download the CA certificate as PEM (for distributing to clients).

ParameterInRequiredTypeDescription
idpathyesintegerA unique integer value identifying this Internal CA.

Responses: 200 → InternalCA

GET /api/acme-server/ca/{id}/directory_url/

Return the ACME directory URL for this CA.

ParameterInRequiredTypeDescription
idpathyesintegerA unique integer value identifying this Internal CA.

Responses: 200 → InternalCA

POST /api/acme-server/ca/{id}/generate_ca/

Generate a new CA key and self-signed certificate for this CA config.

ParameterInRequiredTypeDescription
idpathyesintegerA unique integer value identifying this Internal CA.

Request body (application/json): InternalCARequest

Responses: 200 → InternalCA

GET /api/acme-server/orders/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
orderingquerynostringWhich field to use when ordering the results.
pagequerynointegerA page number within the paginated result set.
page_sizequerynointegerNumber of results to return per page.
searchquerynostringA search term.
statusquerynostring* pending - Pending

Responses: 200 → PaginatedAcmeOrderList

GET /api/acme-server/orders/{id}/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
idpathyesintegerA unique integer value identifying this acme order.

Responses: 200 → AcmeOrder

GET /api/acme-server/orders/{id}/certificate/

Download issued certificate PEM.

ParameterInRequiredTypeDescription
idpathyesintegerA unique integer value identifying this acme order.

Responses: 200 → AcmeOrder


Certificates

GET /api/certificates/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
devicequerynointeger
orderingquerynostringWhich field to use when ordering the results.
pagequerynointegerA page number within the paginated result set.
page_sizequerynointegerNumber of results to return per page.
searchquerynostringA search term.

Responses: 200 → PaginatedCertificateList

POST /api/certificates/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

Request body (application/json): CertificateRequest

Responses: 201 → Certificate

GET /api/certificates/{id}/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
idpathyesintegerA unique integer value identifying this certificate.

Responses: 200 → Certificate

PUT /api/certificates/{id}/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
idpathyesintegerA unique integer value identifying this certificate.

Request body (application/json): CertificateRequest

Responses: 200 → Certificate

PATCH /api/certificates/{id}/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
idpathyesintegerA unique integer value identifying this certificate.

Request body (application/json): PatchedCertificateRequest

Responses: 200 → Certificate

DELETE /api/certificates/{id}/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
idpathyesintegerA unique integer value identifying this certificate.

Responses: 204


Certs

GET /api/certs/certificates/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
auto_renewquerynoboolean
ca_accountquerynointeger
key_sourcequerynostring* versus - Versus-generated (key stored in Versus)
orderingquerynostringWhich field to use when ordering the results.
pagequerynointegerA page number within the paginated result set.
page_sizequerynointegerNumber of results to return per page.
searchquerynostringA search term.
statusquerynostring* draft - Draft

Responses: 200 → PaginatedManagedCertificateListList

POST /api/certs/certificates/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

Request body (application/json): ManagedCertificateRequest

Responses: 201 → ManagedCertificate

GET /api/certs/certificates/expiring_soon/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

Responses: 200 → ManagedCertificate

GET /api/certs/certificates/{id}/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
idpathyesintegerA unique integer value identifying this managed certificate.

Responses: 200 → ManagedCertificate

PUT /api/certs/certificates/{id}/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
idpathyesintegerA unique integer value identifying this managed certificate.

Request body (application/json): ManagedCertificateRequest

Responses: 200 → ManagedCertificate

PATCH /api/certs/certificates/{id}/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
idpathyesintegerA unique integer value identifying this managed certificate.

Request body (application/json): PatchedManagedCertificateRequest

Responses: 200 → ManagedCertificate

DELETE /api/certs/certificates/{id}/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
idpathyesintegerA unique integer value identifying this managed certificate.

Responses: 204

POST /api/certs/certificates/{id}/approve/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
idpathyesintegerA unique integer value identifying this managed certificate.

Request body (application/json): ManagedCertificateRequest

Responses: 200 → ManagedCertificate

GET /api/certs/certificates/{id}/chain/

Return the parsed certificate chain for display.

ParameterInRequiredTypeDescription
idpathyesintegerA unique integer value identifying this managed certificate.

Responses: 200 → ManagedCertificate

POST /api/certs/certificates/{id}/deploy/

Start the 'cert-deploy' workflow for this managed certificate: discover

ParameterInRequiredTypeDescription
idpathyesintegerA unique integer value identifying this managed certificate.

Request body (application/json): ManagedCertificateRequest

Responses: 200 → ManagedCertificate

POST /api/certs/certificates/{id}/discover_targets/

Auto-discover the device/SSL-profile targets that currently serve this

ParameterInRequiredTypeDescription
idpathyesintegerA unique integer value identifying this managed certificate.

Request body (application/json): ManagedCertificateRequest

Responses: 200 → ManagedCertificate

POST /api/certs/certificates/{id}/reject/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
idpathyesintegerA unique integer value identifying this managed certificate.

Request body (application/json): ManagedCertificateRequest

Responses: 200 → ManagedCertificate

GET /api/certs/deployments/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
certificatequerynointeger
devicequerynointeger
orderingquerynostringWhich field to use when ordering the results.
pagequerynointegerA page number within the paginated result set.
page_sizequerynointegerNumber of results to return per page.
searchquerynostringA search term.
statusquerynostring* deployed - Deployed

Responses: 200 → PaginatedCertificateDeploymentList

GET /api/certs/deployments/{id}/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
idpathyesintegerA unique integer value identifying this certificate deployment.

Responses: 200 → CertificateDeployment


Clm

GET /api/clm/ca-accounts/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
pagequerynointegerA page number within the paginated result set.
page_sizequerynointegerNumber of results to return per page.
searchquerynostringA search term.

Responses: 200 → PaginatedCAAccountList

POST /api/clm/ca-accounts/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

Request body (application/json): CAAccountRequest

Responses: 201 → CAAccount

GET /api/clm/ca-accounts/{id}/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
idpathyesintegerA unique integer value identifying this ca account.

Responses: 200 → CAAccount

PUT /api/clm/ca-accounts/{id}/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
idpathyesintegerA unique integer value identifying this ca account.

Request body (application/json): CAAccountRequest

Responses: 200 → CAAccount

PATCH /api/clm/ca-accounts/{id}/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
idpathyesintegerA unique integer value identifying this ca account.

Request body (application/json): PatchedCAAccountRequest

Responses: 200 → CAAccount

DELETE /api/clm/ca-accounts/{id}/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
idpathyesintegerA unique integer value identifying this ca account.

Responses: 204

POST /api/clm/ca-accounts/{id}/generate_ca/

Generate a self-signed CA key + certificate for a versus_ca account.

ParameterInRequiredTypeDescription
idpathyesintegerA unique integer value identifying this ca account.

Request body (application/json): CAAccountRequest

Responses: 200 → CAAccount

POST /api/clm/ca-accounts/{id}/register_account/

Register or recover an ACME account for this CA account.

ParameterInRequiredTypeDescription
idpathyesintegerA unique integer value identifying this ca account.

Request body (application/json): CAAccountRequest

Responses: 200 → CAAccount

POST /api/clm/ca-accounts/{id}/test_connection/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
idpathyesintegerA unique integer value identifying this ca account.

Request body (application/json): CAAccountRequest

Responses: 200 → CAAccount

GET /api/clm/certificates/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
orderingquerynostringWhich field to use when ordering the results.
pagequerynointegerA page number within the paginated result set.
page_sizequerynointegerNumber of results to return per page.
searchquerynostringA search term.

Responses: 200 → PaginatedCertificateRecordListList

POST /api/clm/certificates/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

Request body (application/json): CertificateRecordListRequest

Responses: 201 → CertificateRecordList

POST /api/clm/certificates/import/

Import certificates (and optionally private keys) into the CLM inventory.

Request body (application/json): CertificateRecordListRequest

Responses: 200 → CertificateRecordList

POST /api/clm/certificates/refresh_expiry/

Trigger a bulk expiry lifecycle refresh.

Request body (application/json): CertificateRecordListRequest

Responses: 200 → CertificateRecordList

POST /api/clm/certificates/sync-from-devices/

Bulk-import all applications.Certificate records (device-fetched certs)

Request body (application/json): CertificateRecordListRequest

Responses: 200 → CertificateRecordList

GET /api/clm/certificates/{id}/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
idpathyesintegerA unique integer value identifying this certificate record.

Responses: 200 → CertificateRecordDetail

PUT /api/clm/certificates/{id}/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
idpathyesintegerA unique integer value identifying this certificate record.

Request body (application/json): CertificateRecordListRequest

Responses: 200 → CertificateRecordList

PATCH /api/clm/certificates/{id}/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
idpathyesintegerA unique integer value identifying this certificate record.

Request body (application/json): PatchedCertificateRecordListRequest

Responses: 200 → CertificateRecordList

DELETE /api/clm/certificates/{id}/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
idpathyesintegerA unique integer value identifying this certificate record.

Responses: 204

POST /api/clm/certificates/{id}/adopt/

Adopt a discovered inventory cert into operational management: create a

ParameterInRequiredTypeDescription
idpathyesintegerA unique integer value identifying this certificate record.

Request body (application/json): CertificateRecordListRequest

Responses: 200 → CertificateRecordList

GET /api/clm/certificates/{id}/export_pkcs12/

Export a certificate + private key as PKCS#12.

ParameterInRequiredTypeDescription
idpathyesintegerA unique integer value identifying this certificate record.

Responses: 200 → CertificateRecordList

POST /api/clm/certificates/{id}/transition/

Manually transition a certificate to a new lifecycle state.

ParameterInRequiredTypeDescription
idpathyesintegerA unique integer value identifying this certificate record.

Request body (application/json): CertificateRecordListRequest

Responses: 200 → CertificateRecordList

GET /api/clm/discovery-jobs/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
orderingquerynostringWhich field to use when ordering the results.
pagequerynointegerA page number within the paginated result set.
page_sizequerynointegerNumber of results to return per page.
searchquerynostringA search term.

Responses: 200 → PaginatedDiscoveryJobList

POST /api/clm/discovery-jobs/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

Request body (application/json): DiscoveryJobRequest

Responses: 201 → DiscoveryJob

GET /api/clm/discovery-jobs/{id}/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
idpathyesintegerA unique integer value identifying this discovery job.

Responses: 200 → DiscoveryJob

PUT /api/clm/discovery-jobs/{id}/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
idpathyesintegerA unique integer value identifying this discovery job.

Request body (application/json): DiscoveryJobRequest

Responses: 200 → DiscoveryJob

PATCH /api/clm/discovery-jobs/{id}/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
idpathyesintegerA unique integer value identifying this discovery job.

Request body (application/json): PatchedDiscoveryJobRequest

Responses: 200 → DiscoveryJob

DELETE /api/clm/discovery-jobs/{id}/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
idpathyesintegerA unique integer value identifying this discovery job.

Responses: 204

POST /api/clm/discovery-jobs/{id}/cancel/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
idpathyesintegerA unique integer value identifying this discovery job.

Request body (application/json): DiscoveryJobRequest

Responses: 200 → DiscoveryJob

POST /api/clm/discovery-jobs/{id}/run/

Kick off a discovery job in a background thread.

ParameterInRequiredTypeDescription
idpathyesintegerA unique integer value identifying this discovery job.

Request body (application/json): DiscoveryJobRequest

Responses: 200 → DiscoveryJob

GET /api/clm/escrow-access-log/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
orderingquerynostringWhich field to use when ordering the results.
pagequerynointegerA page number within the paginated result set.
page_sizequerynointegerNumber of results to return per page.

Responses: 200 → PaginatedEscrowAccessLogList

GET /api/clm/escrow-access-log/{id}/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
idpathyesintegerA unique integer value identifying this escrow access log.

Responses: 200 → EscrowAccessLog

GET /api/clm/escrow-keys/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
orderingquerynostringWhich field to use when ordering the results.
pagequerynointegerA page number within the paginated result set.
page_sizequerynointegerNumber of results to return per page.
searchquerynostringA search term.

Responses: 200 → PaginatedEscrowKeyList

GET /api/clm/escrow-keys/{id}/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
idpathyesintegerA unique integer value identifying this escrow key.

Responses: 200 → EscrowKey

GET /api/clm/profiles/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
pagequerynointegerA page number within the paginated result set.
page_sizequerynointegerNumber of results to return per page.
searchquerynostringA search term.

Responses: 200 → PaginatedCertificateProfileList

POST /api/clm/profiles/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

Request body (application/json): CertificateProfileRequest

Responses: 201 → CertificateProfile

GET /api/clm/profiles/{id}/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
idpathyesintegerA unique integer value identifying this certificate profile.

Responses: 200 → CertificateProfile

PUT /api/clm/profiles/{id}/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
idpathyesintegerA unique integer value identifying this certificate profile.

Request body (application/json): CertificateProfileRequest

Responses: 200 → CertificateProfile

PATCH /api/clm/profiles/{id}/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
idpathyesintegerA unique integer value identifying this certificate profile.

Request body (application/json): PatchedCertificateProfileRequest

Responses: 200 → CertificateProfile

DELETE /api/clm/profiles/{id}/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
idpathyesintegerA unique integer value identifying this certificate profile.

Responses: 204


Tls profiles

GET /api/tls-profiles/

List tls profiles

ParameterInRequiredTypeDescription
devicequerynointeger
orderingquerynostringWhich field to use when ordering the results.
pagequerynointegerA page number within the paginated result set.
page_sizequerynointegerNumber of results to return per page.
partitionquerynostring
searchquerynostringA search term.
sidequerynostring* client - Client SSL

Responses: 200 → PaginatedTLSProfileList

GET /api/tls-profiles/{id}/

Retrieve tls profile

ParameterInRequiredTypeDescription
idpathyesintegerA unique integer value identifying this tls profile.

Responses: 200 → TLSProfile


Auto-generated from drf-spectacular OpenAPI. Endpoint descriptions come from viewset docstrings/serializers; enriching those improves this page on the next generation.