3.4 KiB
3.4 KiB
Domain Expiry & Purchase via Cloudflare Registrar
API setup
Requires a Cloudflare API token with TWO permission groups:
| Permission | Level | What it gives |
|---|---|---|
| Zone → DNS → Edit | Edit | DNS record management |
| Account → Domain Registration → Read | Read | View domains, expiry dates, auto-renew status |
| Account → Domain Registration → Admin | Write (+ Admin) | Purchase domains, transfer domains, renew |
The Admin level adds domain_create, domain_register capabilities not visible in Read. The check_availability endpoint requires Route: GET /accounts/{id}/registrar/domains/{name}/check — NOT the POST variant.
Endpoints
List registered domains
GET /accounts/{id}/registrar/domains
Returns:
name: domain nameexpires_at: ISO date (e.g. "2027-02-06T00:43:04.000Z")auto_renew: booleancloudflare_registration: boolean (true = registered through Cloudflare)permissions: array of strings (e.g.["contact_read", "contact_write", "domain_renew", "nameserver_write", "domain_delete"])
Check domain availability
GET /accounts/{id}/registrar/domains/{name}/check
Returns:
available: booleancan_register: booleansupported_tld: booleanpremium: booleanfees.registration_fee: number (USD)fees.renewal_fee: number (USD)fees.transfer_fee: number (USD)
Renew a domain
PUT /accounts/{id}/registrar/domains/{name}/renewal
Body: {"period": 1} # years
Real data pulled from Germaine's account (Jul 6, 2026)
12 domains, all registered through Cloudflare, all auto-renew ON:
| Domain | Expires | Days Left | Price/yr |
|---|---|---|---|
| forefrontisp.com | Oct 7, 2026 | 92 | $10.46 |
| vigilanttac.com | Oct 14, 2026 | 99 | $10.46 |
| voipsimplicity.com | Nov 17, 2026 | 133 | $10.46 |
| katiewattsdesign.com | Dec 29, 2026 | 175 | $10.46 |
| boxpilotlogistics.com | Feb 6, 2027 | 214 | $10.46 |
| germainebrown.com | Aug 3, 2027 | 392 | $10.46 |
All standard .com pricing at $10.46/yr (Cloudflare at cost — no markup).
Portal integration
The DNS & Domains portal page (dns.html) has two tabs:
- DNS Zones — Lists all zones with record count, plan, customer link. Opens DNS record editor.
- Registered Domains — Lists all domains with expiry, auto-renew, days left (color-coded). Renew button per domain. Search + Register panel with availability check and pricing.
Key fields for the domain table:
name→ domain nameexpires_at→ formatted as "Mon DD, YYYY"auto_renew→ boolean badge (green if ON, red if OFF)- Days left =
(expires_at - now).days - Color coding: green (>180 days), amber (90-180 days), red (<90 days)
The search panel shows availability results with registration fee, renewal fee, and transfer fee. "Add to Cart" button would trigger registration flow.
Pitfalls
- The availability check endpoint uses GET with the domain in the path, NOT POST with body. POST returns "Page not found".
can_registerisFalseon domains already owned by the account — that's expected, not an error.- Expiry dates are stored in UTC. Convert to local timezone when displaying.
- Cloudflare does NOT disclose registration fees in the availability check response JSON field directly — the fee is nested under
fees.registration_fee. - Premium domains return
premium: trueand have different pricing. The portal should flag these.