ACME Status
Current state of automated TLS certificate issuance for a custom domain. The platform issues certificates via Let's Encrypt (or another configured ACME CA) using the DNS-01 challenge against the provider you configured. This endpoint reports whether the cert is issued, pending challenge, or in error, plus when it was last issued and when it'll auto-renew.
Useful for surfacing TLS health to users and for integrations that need to wait for a fresh cert before deploying. Renewal happens automatically ~30 days before expiry — to force an immediate reissue, use POST /v1/domains/self/{uuid}/reissue-ssl.
Path parameters
uuid string (uuid) Req
Domain UUID.
Response (200 OK)
status string
issued | pending | renewing | error | not_started.issued_at datetime | null
When the active cert was issued.
null if no cert has been issued yet.expires_at datetime | null
Active cert expiry. Let's Encrypt issues 90-day certs.
renew_at datetime | null
When the platform's renewal worker will auto-renew this cert. Typically
expires_at - 30d.last_attempt_at datetime | null
Most recent issuance/renewal attempt timestamp.
last_error string | null
Error message from the most recent failed attempt. Empty if the last attempt succeeded.
challenges array
Pending ACME challenges (only populated while
status: "pending"). Each: {type, name, value, validation_state}. For DNS-01 challenges, the platform handles the TXT-record dance with the DNS provider — you don't need to do anything.Errors
401 Unauthorized
Missing auth.
404 Not Found
Domain doesn't exist or doesn't belong to the calling user.
Request
curl "https://api.ngris.com/v1/domains/self/<uuid>/acme/status" \
-H "X-API-KEY: <your_api_key>"
Python
from ngris import Ngris
client = Ngris(api_key="<your_api_key>")
status = client.domains.get_acme_status("<domain_uuid>")
if status["status"] == "error":
print("ACME failed:", status["last_error"])
Response — issued
{
"status": "issued",
"issued_at": "2026-04-15T08:23:00Z",
"expires_at": "2026-07-14T08:23:00Z",
"renew_at": "2026-06-14T08:23:00Z",
"last_attempt_at": "2026-04-15T08:23:00Z",
"last_error": null,
"challenges": []
}
Response — error
{
"status": "error",
"issued_at": "2026-01-15T08:23:00Z",
"expires_at": "2026-04-15T08:23:00Z",
"renew_at": null,
"last_attempt_at": "2026-04-29T12:00:00Z",
"last_error": "DNS provider returned 401 — credentials may have been rotated",
"challenges": []
}