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

# List custom domains

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

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

Returns every custom domain attached to the app.

The list covers domains at any stage: added but not linked, linked but not yet verified, live, redirecting elsewhere, and disabled. Read `last_status_payload.verificationStatus` to tell them apart rather than assuming a domain in this list is serving traffic.

Domains bought through Base44 and domains you own elsewhere both appear here. `provider_id` does not separate them: it is set only for a domain bought through the Wix flow, and `null` for both an externally owned domain and one bought through the Entri flow.

<Note>A domain is only serving traffic once it is linked and its `last_status_payload.verificationStatus` is `verified`. Adding a domain and linking it are separate steps, and DNS propagation happens outside Base44, so a linked domain can sit unverified for as long as its nameservers take.</Note>

<Note>This endpoint accepts a personal API key. Workspace API keys are not authorized for it and are rejected with a 403.</Note>

<Warning>The response includes fields beyond the ones documented here. Don't rely on undocumented response fields, as they can change at any time.</Warning>

## Path parameters

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

## Response `200`

The app's custom domains.

- CustomDomainResource[]
  - `id` string, required — ID of the domain. Pass it as `domain_id` to the other domain endpoints.
  - `domain` string, required — The domain name, normalized: lower-cased, with any scheme, trailing slash and leading `www.` removed.
  - `app_id` string, required — ID of the app the domain serves.
  - `disabled` boolean, required — Whether Base44 has stopped serving the domain. A disabled domain keeps its DNS and its row, and serves a placeholder page instead of the app.
  - `last_status_check` string, date-time, nullable — When [Get custom domain status](/api-reference/get-custom-domain-status) last ran for this domain, or `null` if it never has.
  - `last_status_payload` CustomDomainStatusPayload — What the hosting provider last reported about the domain.
    - `verificationStatus` string, nullable — Whether the provider has verified the domain's DNS. `verified` is the only value that means the domain serves the app; anything else means it does not yet. Absent until [Get custom domain status](/api-reference/get-custom-domain-status) has run once.
  - `redirect_target_domain` string, nullable — The domain this one 301-redirects to, or `null` when it serves the app itself.
  - `provider_id` string, nullable — Names the registrar when the domain was bought through Base44's Wix flow. `null` otherwise, which covers both a domain you own elsewhere and one bought through the Entri flow, so this is not a purchased-versus-external signal.

## Other responses

- `401` — Missing or invalid credentials.
- `403` — You don't have access to this app, or you used a workspace API key. These endpoints take a personal API key.
- `404` — App not found.

## Changes

- **2026-08-30** `394136a6cdd4` — 1 info
  - removed the non-success response with the status `422`
- **2026-08-26** `f2727732ced1` — 1 info
  - endpoint added

[Change history](https://skmtc.dev/idealspot/apis/base44-app-management-api/changes/api/apps/:app_id/custom-domains/get.md)

---

[API](https://skmtc.dev/idealspot/apis/base44-app-management-api.md) · [All operations](https://skmtc.dev/idealspot/apis/base44-app-management-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/idealspot/base44-app-management-api/revisions/394136a6cdd4/schema)
