curl --request GET \
--url https://app.base44.com/api/apps/{app_id}/custom-email-domains \
--header 'api_key: <api-key>'import requests
url = "https://app.base44.com/api/apps/{app_id}/custom-email-domains"
headers = {"api_key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {api_key: '<api-key>'}};
fetch('https://app.base44.com/api/apps/{app_id}/custom-email-domains', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://app.base44.com/api/apps/{app_id}/custom-email-domains",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"api_key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://app.base44.com/api/apps/{app_id}/custom-email-domains"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("api_key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://app.base44.com/api/apps/{app_id}/custom-email-domains")
.header("api_key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.base44.com/api/apps/{app_id}/custom-email-domains")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["api_key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"email_domains": [
{
"configuration_status": "active",
"dns_records": [],
"domain": "example.com",
"enabled_at": "2026-08-20T16:31:00",
"external": true,
"from_email": "no-reply@example.com",
"id": "68b1c0d4e7b91d003c45a1f2",
"sender_name": "Nordwind Furniture"
}
]
}List email domains
Lists the app’s email domains and where each one is in setup.
An app with no email set up returns an empty list rather than an error, so this is the safe endpoint to poll while a domain verifies.
You normally get one domain. During a replacement you get two, the old one still sending and the new one still verifying. Disabled and suspended domains aren’t listed, so unlinking a custom domain drops its email domain from this list until you link the domain again.
Every entry repeats the same id, which identifies the app’s email configuration rather than the individual domain. Tell entries apart by domain, and pass that value to the endpoints that take a domain parameter.
curl --request GET \
--url https://app.base44.com/api/apps/{app_id}/custom-email-domains \
--header 'api_key: <api-key>'import requests
url = "https://app.base44.com/api/apps/{app_id}/custom-email-domains"
headers = {"api_key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {api_key: '<api-key>'}};
fetch('https://app.base44.com/api/apps/{app_id}/custom-email-domains', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://app.base44.com/api/apps/{app_id}/custom-email-domains",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"api_key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://app.base44.com/api/apps/{app_id}/custom-email-domains"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("api_key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://app.base44.com/api/apps/{app_id}/custom-email-domains")
.header("api_key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.base44.com/api/apps/{app_id}/custom-email-domains")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["api_key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"email_domains": [
{
"configuration_status": "active",
"dns_records": [],
"domain": "example.com",
"enabled_at": "2026-08-20T16:31:00",
"external": true,
"from_email": "no-reply@example.com",
"id": "68b1c0d4e7b91d003c45a1f2",
"sender_name": "Nordwind Furniture"
}
]
}Authorizations
Personal API key.
Path Parameters
ID of the app whose email domains you want to work with.
Response
The app's email domains. Empty when none are set up.
Response for listing email domains for an app.
The app's email domains. Usually one, empty when none are set up, and two while a replacement is in flight.
Show child attributes
Show child attributes
[
{
"configuration_status": "active",
"dns_records": [],
"domain": "example.com",
"enabled_at": "2026-08-20T16:31:00",
"external": true,
"from_email": "no-reply@example.com",
"id": "68b1c0d4e7b91d003c45a1f2",
"sender_name": "Nordwind Furniture"
}
]
Was this page helpful?