The BrandShelter SSL API with ACME support enables automated SSL certificate management through industry-standard workflows and offers you new ways to streamline certificate management and integrate it directly into your existing workflows.
Whether you're managing a single certificate or an extensive portfolio, the SSL API helps reduce manual effort and provides greater flexibility and control over the certificate lifecycle.
What the SSL API Enables
BrandShelter’s SSL API supports the full lifecycle management of Domain Validation (DV), Organization Validation (OV), and Extended Validation (EV) certificates.
- Programmatic SSL certificate ordering and issuance
- Certificate information and status retrieval
- Automated renewals, reissuance, and revocation
- Integration with customer systems and operational workflows
- Management of DV, OV, and EV certificate portfolios through a single API
ACME Support for Automated Certificate Management
BrandShelter’s SSL API now supports the ACME protocol, allowing customers to automate certificate management for supported DV certificate products using popular ACME-compatible clients such as:
- Certbot
- acme.sh
- lego
- win-acme
- Traefik
- Caddy
DNS Validation
For customers using BrandShelter-managed DNS, validation records can be published automatically, helping simplify certificate issuance and renewal even further.
Why This Matters
As SSL certificate validity periods continue to decrease across the industry, organizations will need to renew and validate certificates more frequently. Automation is rapidly becoming an important requirement for IT, infrastructure, and security teams.
Get Started
Explore the SSL API and ACME documentation and implementation guide to learn how to start automating certificate management.
Introduction to the SSL API solution
Actions Supported in the SSL API
Action |
GraphQL operation |
|---|---|
List / filter / inspect certificates |
|
Order a new certificate |
|
Reissue a certificate |
|
Renew a certificate |
|
Edit metadata |
|
Revoke an active certificate |
|
Automated DV lifecycle |
ACME protocol (separate from GraphQL) |
List active certificates expiring this year
query ExpiringSoon {
sslCertificates(
state: [active],
expiresAtBefore: "2026-12-31T00:00:00Z",
first: 50
) {
nodes {
id
commonName
expiresAt
autoRenew
}
totalCount
}
}
Renew a certificate
Reuses the existing certificate's CSR, contacts, validation method and other attributes — only the certificate id needs to be supplied.
mutation RenewSSLCertificate {
renewSslCertificate(id: "1041") {
workRequest {
id
type
state
createdAt
}
}
}
Sample response (renewal accepted and submitted):
{
"data": {
"renewSslCertificate": {
"workRequest": {
"id": "8821",
"type": "RENEW_SSL_CERTIFICATE",
"state": "submitted",
"createdAt": "2026-05-28T09:42:11Z"
}
}
}
}
Renewal is allowed when the certificate is not of an "external" type (i.e. managed through BrandShelter, not merely imported for tracking) and is currently in state active or expired. Otherwise the mutation returns:
{
"errors": [
{
"message": "Certificate is not renewable",
"extensions": { "code": "certificate_not_renewable" }
}
],
"data": { "renewSslCertificate": null }
}
Revoke a certificate
Allowed when the product type permits revocation (see SSLCertificateType.revocable) and the certificate is currently in state active.
mutation RevokeSSLCertificate {
revokeSslCertificate(id: "1041") {
sslCertificateId
workRequestId
}
}
Sample response:
{
"data": {
"revokeSslCertificate": {
"sslCertificateId": "1041",
"workRequestId": "8822"
}
}
}
Best Practices
For ordered certificates, enrol in automatic renewal by passing
autoRenew: true— the platform will then track expiry and trigger renewals on the client's behalf.
For pure DV automation, prefer ACME over driving the GraphQL renew flow from a client. ACME is fully unattended once configured and integrates with standard tooling.
Before attempting reissue or revoke, check
SSLCertificateType.reissuable/.revocablefor the product type — these flags drive the allowed actions and the matching error codes.
For DigiCert and Sectigo products with vendor-mandated 199-day maximum lifetimes, no client action is required: the platform handles the auto-reissue cycle transparently, and clients see a normal 1-year renewal cadence.
When polling work-request status, back off exponentially. Avoid tight polling loops against the GraphQL endpoint.
Watch the certificate
statefor terminal failure states (order_failed,renewal_failed,reissue_failed) and surface them to operators promptly — they indicate a process that needs investigation.
Log mutation errors with their
extensions.codevalue (certificate_not_renewable,certificate_not_revocable, etc.) so support tooling can match on stable identifiers rather than message text.
Error Handling and Status Expectations
Certificate lifecycle states (SSLCertificateState enum):
Stable / terminal:
active,ordered,revoked,expired.In-flight (a work request is being processed):
renewal_pending,reissue_pending,revocation_pending.Terminal failures:
order_failed,renewal_failed,reissue_failed.Cancelled before completion:
order_cancelled,renewal_cancelled,reissue_cancelled.
Common mutation error codes (in extensions.code):
certificate_not_renewable— the certificate is of an "external" type, or is not currently in stateactiveorexpired.certificate_not_revocable— the certificate is not in stateactive, or the product type does not allow revocation.
Requesting an id that is not visible to the authenticated user, or that does not exist, returns a generic not-found / authorization error rather than disclosing whether the id exists.
For the full enum lists and field-level metadata, run a GraphQL introspection query against the live endpoint, or browse via a GraphQL client.