certbot
certbot needs no plugin. It hands the challenge to a hook script of yours, which is all our endpoints want. Write two, identical but for the last path segment, and make them executable.
#!/bin/sh
# /etc/letsencrypt/dnsmint-auth.sh (chmod +x)
# Swap present for cleanup in the second copy.
exec curl -fsS -X POST https://dnsmint.com/api/httpreq/present \
-H "Authorization: Bearer $DNSMINT_KEY" \
-H "Content-Type: application/json" \
-d "{\"fqdn\":\"_acme-challenge.$CERTBOT_DOMAIN.\",\"value\":\"$CERTBOT_VALIDATION\"}"Put the key carrying dns01:write in DNSMINT_KEY in the environment certbot runs under, then:
$ certbot certonly --manual --preferred-challenges dns \
--manual-auth-hook /etc/letsencrypt/dnsmint-auth.sh \
--manual-cleanup-hook /etc/letsencrypt/dnsmint-cleanup.sh \
-d q7k4m2.a3f9c1-d4e7b8.dev -d '*.q7k4m2.a3f9c1-d4e7b8.dev'CERTBOT_DOMAIN is never the wildcard form, so the hostname and its wildcard produce one challenge name and two values, which is what DNS-01 wants. This works the same whether certbot came from pip, a package manager, or snap.
Every recipe is verified against the client's current release. The other integrations cover the rest, and the quickstart goes from a bare address to HTTPS without any of them.