---
title: "List domain registrations"
method: GET
path: "/api/apps/{app_id}/custom-domains/registrations"
---

# List domain registrations

`GET /api/apps/{app_id}/custom-domains/registrations`

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

Returns the registration status of each domain bought through Base44 for the app, including when it expires and whether it renews.

Domains you own elsewhere aren't included. Their registration lives with your own registrar.

Only a workspace owner can read registrations, because renewal is managed for the whole workspace.

Fields come back `null` when the registration can't be read, for example while the registrar is unavailable. That isn't a failure of the call, so read the value again later.

Registrations are ordered by domain name, with cursor-based pagination. To get the next page, send only the `cursor` from the previous response. It carries `limit` with it.

Reading registrations is limited to 30 requests a minute per caller. Some workspaces have a different limit.

## Path parameters

- `app_id` string, required — ID of the app the domain belongs to.

## Query parameters

- `limit` integer — Items per page. Max 50.
- `cursor` string, nullable — Pagination cursor from previous response.

## Response `200`

Successful Response

- DomainRegistrations — The registration status of the app's domains bought through Base44.
  - `registrations` DomainRegistration[], required — One entry per domain bought through Base44 for this app, on this page.
    - `domain` string, required — The domain name.
    - `can_manage` boolean, nullable, required — Whether the workspace's account holds the registration, so its renewal can be managed (`true`) or not (`false`). The value is `null` when Base44 couldn't read the registration.
    - `expires_at` string, nullable, required — When the current registration period ends, as an ISO 8601 timestamp. With `auto_renew` on, the domain renews then. The value is `null` when Base44 couldn't read it.
    - `auto_renew` boolean, nullable, required — Whether the registration renews automatically (`true`) or lapses at `expires_at` (`false`). The value is `null` when Base44 couldn't read it.
  - `pagination` PublicPaginationInfo, required — Pagination metadata for a cursor-paginated page.
    - `total` integer, required — Total number of matching items.
    - `next_cursor` string, nullable — Cursor for fetching the next page. The value is `null` if there are no more pages.
    - `has_more` boolean, required — Whether there are more items to fetch.

## Other responses

- `400` — The `cursor` is invalid, expired, or from another request, or `limit` was sent beside it (`invalid_request`).
- `401` — Missing or invalid credentials (`unauthenticated`).
- `403` — You don't have access to this app, you aren't a workspace owner, or you used a workspace API key (`forbidden`). This endpoint takes a personal API key.
- `404` — App not found (`not_found`).
- `422` — A parameter is the wrong type or out of range (`invalid_request`). `error.details.errors` lists each problem.
- `429` — Rate limit reached (`rate_limited`). Retry later.

## Changes

> 18 revisions in range; 1 not diffed.

- **2026-09-28** `28fc82924122` — 1 info
  - endpoint added

[Change history](https://skmtc.dev/adexad/apis/base44-app-management-api/changes/api/apps/:app_id/custom-domains/registrations/get.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/28fc82924122?raw)
