---
title: "Update a domain registration"
method: PATCH
path: "/api/apps/{app_id}/custom-domains/{domain_id}/registration"
---

# Update a domain registration

`PATCH /api/apps/{app_id}/custom-domains/{domain_id}/registration`

## Request

- Base URL: `https://app.base44.com`
- URL: `https://app.base44.com/api/apps/{app_id}/custom-domains/{domain_id}/registration`
- Auth: HTTP bearer

<Info>This API is in beta. Endpoints, fields, and behavior may still change, so avoid depending on it in production.</Info>

Turns automatic renewal on or off for a domain bought through Base44 for the app. Pass the domain's `domain_id` from [List domain registrations](/api-reference/list-domain-registrations).

With automatic renewal off, the domain lapses when its current period ends, at the `expires_at` that [List domain registrations](/api-reference/list-domain-registrations) reports. Turning it back on renews the domain at that point, charged to the payment method on the domain's subscription. The workspace's billing page lists that subscription.

A successful call returns no body. It means the registrar accepted the change. List domain registrations can take a short while to show it, so read it again rather than relying on the first read.

If the registrar can't be reached, the change may not have been made. Read the registration before you retry.

Only a workspace owner can change a registration, because renewal is managed for the whole workspace. Domains you own elsewhere can't be changed here. Their renewal lives with your own registrar.

## Path parameters

- `app_id` string, required: ID of the app the domain belongs to.
- `domain_id` string, required: ID of the custom domain. Get this from [List custom domains](/api-reference/list-custom-domains).

## Request body

- DomainRegistrationUpdate
  - `auto_renew` boolean, required: Whether the registration renews automatically (`true`) or lapses at the end of its current period (`false`).

## Response `204`

The registrar accepted the change.

## Other responses

- `400`: Base44 couldn't open a session with the registrar for your account, so nothing changed (`registrar_session_unavailable`). Try again later.
- `401`: Missing or invalid credentials (`unauthenticated`).
- `402`: Turning automatic renewal on needs a plan that includes custom domains (`custom_domains_not_in_plan`).
- `403`: You don't have write access to the app, you aren't a workspace owner, your personal access token is read-only, or you used a workspace API key (`forbidden`).
- `404`: The domain or the app isn't found (`not_found`), or the domain wasn't bought through Base44, so it has no registration here (`registration_not_found`).
- `409`: The workspace's account doesn't hold an active registration for the domain (`registration_not_manageable`). That happens when another workspace bought it, for example before the app moved workspaces, or when the registration has ended.
- `422`: `auto_renew` is missing or isn't a boolean, or the body has other fields (`invalid_request`). `error.details.errors` lists each problem.
- `429`: Rate limit reached (`rate_limited`). The base limit is 10 requests per minute per user. A successful response reports the budget in `X-RateLimit-Limit`, `X-RateLimit-Remaining`, and `X-RateLimit-Reset` (Unix seconds), and a rate-limited one adds `Retry-After`. See [Rate limits](/developers/references/apps-api/get-started/rate-limits) for the multiplier your plan gets.

## Changes

> 58 revisions in range; 1 not diffed.

- **2026-10-13** `b92cc2f13639`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/adexad/apis/base44-app-management-api/changes/api/apps/:app_id/custom-domains/:domain_id/registration/patch.md)

---

[API](https://skmtc.dev/adexad/apis/base44-app-management-api.md) · [All operations](https://skmtc.dev/adexad/apis/base44-app-management-api/llms.txt) · [OpenAPI document](https://skmtc.dev/adexad/apis/base44-app-management-api/revisions/fa29e915c226?raw)
