List custom domains

GET /v1/custom-domains · permission custom-domains:read

Lists the environment's custom login domains, oldest first. Only forward pagination (after) is supported; before and any order other than asc return 422. Removed (released) domains are left out unless include_released=true; status returns only domains in that status (released included). An environment has at most 1 custom domain (20 on Enterprise).

Request

Field Type Required Description
limit integer no Page size, 1-100 (default 20).
after string no Cursor from the previous page's list_metadata.after.
status string no Only domains in this status: pending_dns, issuing, active, degraded, disabled or released.
include_released boolean no When true, released domains are listed too. Ignored when status is given.

No request body.

Response

200 OK with a page of domains (the list items have no caa field).

{
  "data": [
    {
      "id": "cdom_01j9xk3m7q8r2s4t6v8w0y2z4a",
      "hostname": "login.example.com",
      "is_primary": true,
      "status": "active",
      "failure_reason": null,
      "dns_records": [
        {
          "type": "TXT",
          "name": "_akp-verify.login.example.com",
          "value": "idp-verify=3q2-7wEXAMPLEtokenQ9"
        },
        {
          "type": "CNAME",
          "name": "login.example.com",
          "value": "acme.eu.edge.keenauth.app"
        }
      ],
      "certificate_expires_at": "2027-01-04T09:31:12Z",
      "last_checked_at": "2026-10-05T09:31:00Z",
      "next_check_at": null,
      "activated_at": "2026-10-05T09:31:12Z",
      "degraded_since": null,
      "status_changed_at": "2026-10-05T09:31:12Z",
      "created_at": "2026-10-05T09:30:00.123456Z",
      "updated_at": "2026-10-05T09:31:12Z"
    }
  ],
  "list_metadata": {
    "before": null,
    "after": null
  }
}

Errors

HTTP code When
422 invalid_cursor The cursor is malformed or belongs to another filter.
422 validation_failed A query parameter is invalid (before, order=desc, unknown status).
401 unauthenticated The credential is missing, invalid or revoked.
403 insufficient_permissions The credential lacks the required permission.
429 rate_limited The rate limit was exceeded; retry after the Retry-After period.
503 service_unavailable A dependency is temporarily unavailable; retry after the Retry-After period.

Example

curl "https://api.eu.keenauth.com/v1/custom-domains?limit=20" \
  -H "Authorization: Bearer $KEENAUTH_SECRET_KEY"