Artica Wiki

Let's Encrypt: Renewal Events

Persistent journal of every Let's Encrypt renewal attempt (HTTP-01 and DNS-01) with automatic reverse-proxy reload

Back to Certificates Center main section

Artica renews Let's Encrypt certificates automatically, whether they were issued through the HTTP-01 challenge (port 80 validation) or the DNS-01 challenge (TXT record validation through a DNS provider such as Cloudflare, OVH, Route53…). 
The Renewal events feature adds a persistent, queryable journal of every renewal attempt the appliance performs 
Successes and failures, with the exact ACME error message — and automatically reloads the reverse-proxy websites that use a certificate once it has been renewed.

Before this feature, renewal outcomes were only visible in transient notifications and log files: 
after a daemon restart, there was no way to answer “was my certificate renewed last night, and if not, why?”. The renewal journal answers that question for a full year of history.

Benefits

Use cases

Where to find it

Open Your System → Certificates Center. The Let's Encrypt wizard is opened by the Let's Encrypt Certificate button:

Certificates Center with the Let's Encrypt Certificate button

Inside the wizard, a new Renewal history tab sits next to the request tabs:

Let's Encrypt wizard tabs including Renewal history

Reading the renewal history

Renewal history tab: statistics and the events table

The header line shows the totals — and each label is a clickable filter: click Success or Failed to restrict the table, and the total to show everything again.

Date When the renewal attempt started.
Domain The certificate CommonName. 
Hover it to see the full SAN list (all hosts covered by the certificate).
Challenge http-01 (port-80 validation) or dns-01 (TXT record validation).
Provider The DNS provider used for a DNS-01 renewal (cloudflare, ovh…). 
Empty for HTTP-01.
Status Success or Failed.
Duration Total time of the attempt. DNS-01 renewals typically take 40–60 seconds 
(TXT propagation), HTTP-01 a few seconds.
New expiry The NotAfter date of the freshly issued certificate (successes only).
Websites reloaded A green check when the reverse-proxy websites using this certificate were rebuilt 
and reverse-proxy service was gracefully reloaded after the renewal.
Error The exact error for failed attempts, truncated for display — hover it to read the complete ACME message.

Understanding failures

Failed renewal entries with their ACME error messages

Typical failure signatures:

A failed attempt is retried on the next cycle automatically; 
the journal keeps one entry per attempt, so a recurring problem is immediately visible as a series of failed rows on the same domain.

Automatic reverse-proxy reload

When the appliance runs the reverse-proxy, renewing a certificate is only half of the job: the websites using it must be rebuilt so reverse-proxy service serves the new certificate. 
This is now automatic for both renewal engines:

If reverse-proxy service is not enabled on the appliance, the renewal is stored normally and no reload is attempted.

REST API

The journal is exposed on the local articarest socket (and on the authenticated REST port):

SOCKET="/usr/share/artica-postfix/bin/run/articarest.sock"
# Last renewal events (most recent first)
curl -s --unix-socket $SOCKET "http://localhost/letsencrypt/renewals/logs?limit=100"
# Only failures for one domain
curl -s --unix-socket $SOCKET "http://localhost/letsencrypt/renewals/logs?domain=www.example.com&status=failed"
# Global counters
curl -s --unix-socket $SOCKET "http://localhost/letsencrypt/renewals/stats"

Parameters of /letsencrypt/renewals/logs: 

  1. domain (exact CommonName), 
  2. status (success or failed), 
  3. limit (default 100, maximum 1000). 

Each entry returns: date, common_name, domains, challenge, provider, status, error, duration_ms, new_expiry.

Example answer of /letsencrypt/renewals/stats:

{
  "stats": {
      "total": 6,
      "success": 4,
      "failed": 2,
      "last_success": "2026-08-02 23:31:45",
      "last_failure": "2026-07-29 23:31:45"
  },
  "success": true
}

Notes