Skip to content

HTTP API

The dashboard uses these same-origin HTTP endpoints. They are useful for understanding the integration surface and operation lifecycle.

All endpoints expect authenticated requests. Issue and revoke operations may also require app roles when Acmebot:AppRoleRequired=true.

Authentication

The v5 API is intended to be protected by App Service Authentication. For interactive use, users sign in through the dashboard. For automation, call the API with an authenticated principal that App Service Authentication can validate, typically a Microsoft Entra ID bearer token.

http
Authorization: Bearer <access-token>
Accept: application/json

The Function triggers use anonymous trigger authorization internally, but the application code rejects requests without an authenticated user. A Functions host key by itself does not satisfy the dashboard or API authentication checks.

When app role enforcement is enabled, issue and renew operations require Acmebot.IssueCertificate, and revoke operations require Acmebot.RevokeCertificate.

Endpoints

MethodPathPurpose
GET/api/certificatesList certificates from Key Vault.
POST/api/certificatesStart certificate issuance.
POST/api/certificates/{certificateName}/renewStart manual renewal.
POST/api/certificates/{certificateName}/revokeRevoke a certificate through the ACME CA.
GET/api/dns-zonesList DNS zones from configured providers.
GET/api/operations/{instanceId}Poll an issuance or renewal operation.

Operation Lifecycle

POST /api/certificates and POST /api/certificates/{certificateName}/renew return 202 Accepted with a Location header. Poll that URL until it returns:

StatusMeaning
202Operation is pending or running.
200Operation completed.
Problem responseOperation failed.

Issue Certificate

http
POST /api/certificates
Content-Type: application/json
Accept: application/json
json
{
  "certificateName": "wildcard-example-com",
  "dnsNames": ["*.example.com"],
  "dnsProviderName": "Azure DNS",
  "keyType": "RSA",
  "keySize": 2048,
  "reuseKey": false,
  "dnsAlias": "acme-validation.example.net",
  "tags": {
    "owner": "platform"
  }
}

CertificatePolicyItem

PropertyRequiredDescription
certificateNameNoKey Vault certificate name. If omitted, Acmebot derives it from the first DNS name.
dnsNamesYesDNS names to include in the certificate.
dnsProviderNameNoProvider display name, such as Azure DNS or Cloudflare. Required when Acmebot cannot infer a single provider.
keyTypeYesRSA or EC.
keySizeFor RSA2048, 3072, or 4096.
keyCurveNameFor ECP-256, P-384, P-521, or P-256K.
reuseKeyNoWhether Key Vault should reuse the certificate key.
dnsAliasNoAlternate domain used for DNS-01 validation.
tagsNoCustom Key Vault certificate tags. Acmebot is reserved.

List Certificates

http
GET /api/certificates
Accept: application/json

Returns an array of CertificateItem.

json
[
  {
    "id": "https://my-vault.vault.azure.net/certificates/wildcard-example-com/...",
    "name": "wildcard-example-com",
    "dnsNames": ["*.example.com"],
    "dnsProviderName": "Azure DNS",
    "createdOn": "2026-05-01T00:00:00+00:00",
    "expiresOn": "2026-07-30T00:00:00+00:00",
    "x509Thumbprint": "ABCDEF...",
    "keyType": "RSA",
    "keySize": 2048,
    "reuseKey": false,
    "isExpired": false,
    "isIssuedByAcmebot": true,
    "isSameEndpoint": true,
    "acmeEndpoint": "acme-v02.api.letsencrypt.org",
    "dnsAlias": "",
    "tags": {
      "owner": "platform"
    }
  }
]

List DNS Zones

http
GET /api/dns-zones
Accept: application/json
json
[
  {
    "dnsProviderName": "Azure DNS",
    "dnsZones": [
      { "name": "example.com" }
    ]
  }
]

Manual Renewal

http
POST /api/certificates/wildcard-example-com/renew
Accept: application/json

Returns 202 Accepted with a Location header for operation polling.

Revocation

http
POST /api/certificates/wildcard-example-com/revoke
Accept: application/json

Revocation waits for the ACME revoke operation to complete and returns 200 OK on success.

Errors

Validation errors return a problem response that may include field-specific errors. Orchestration failures return problem details from the failed Durable Functions instance.

Common statuses:

StatusMeaning
401Request is not authenticated.
403User does not have the required app role.
400Request validation failed or operation instance was not found.
500Operation failed unexpectedly.

Released under the Apache License 2.0.