URL: /guides/renewals-and-auto-renew

---
title: Renewals and auto-renew
description: Stop a domain from expiring — manually, automatically, or both.
---

Domains don't last forever. Each registration has an expiry; renewing extends it.

## Auto-renew (recommended)

Toggle on a single domain:

```bash
curl -X PATCH "https://api.domaingenius.com.au/api/v1/orgs/$DG_ORG/domains/example.com.au" \
  -H "Authorization: Bearer $DG_KEY" \
  -d '{ "auto_renew": true }'
```

We attempt the renewal **30 days before expiry**, again at 14 days, and again at 7. The cost debits the org balance; if the balance is short, auto-top-up runs first. A failed renewal triggers an email and a webhook (`domain.expiring.7d`).

Auto-renew is **on by default** on every domain we register. Newly transferred-in domains inherit the previous registrar's setting, which is usually off — re-enable.

## Renew now

```bash
curl -X POST "https://api.domaingenius.com.au/api/v1/orgs/$DG_ORG/domains/example.com.au/renew" \
  -H "Authorization: Bearer $DG_KEY" \
  -d '{ "years": 2 }'
```

Most TLDs allow renewing for up to 10 years total (registry limit). The maximum extension is `max_period_years - current_period`. Use `GET /pricing/{tld}` for the cap.

## Grace and redemption

| Window | What happens | Recovery cost |
| --- | --- | --- |
| 0–30 days post-expiry | Domain enters **renewal grace** at the registry. Still resolvable on most TLDs. | Standard renewal price |
| 30–60 days post-expiry | **Redemption period**. Domain stops resolving. | Renewal + redemption fee (varies by TLD; ~$120 AUD for `.com`) |
| 60+ days post-expiry | **Released to pool**. Anyone can register it. | Open auction or standard registration |

Different TLDs use different windows — `.com.au` has a 30-day grace, no formal redemption. `.com` has 30-day grace + 30-day redemption. The `state` field on a domain reflects which window it's in.

## Bulk renew

```bash
curl -X POST "https://api.domaingenius.com.au/api/v1/orgs/$DG_ORG/domains/renew-bulk" \
  -H "Authorization: Bearer $DG_KEY" \
  -d '{ "domains": ["a.com.au", "b.com.au", "c.com.au"], "years": 1 }'
```

Bulk renew always confirms when called from MCP/agent, never confirms when called from a key — the key holder is presumed to have authority.

## What happens at expiry, by source

- **Expired with auto-renew on, balance OK** — quietly renewed. No notification beyond the billing-contact receipt.
- **Expired with auto-renew on, balance short, auto-top-up off** — `domain.expiring.7d` webhook fires; the dashboard flags the domain. Renewal stops if not paid.
- **Expired with auto-renew off** — `domain.expiring.30d` and `.7d` webhooks fire; an email goes to the registrant and admin contacts.
