Custom domains
On this page, we'll dive into the different custom domains endpoints you can use to manage custom domains programmatically. We'll look at how to query, create, update, and delete custom domains.
The custom domain model
The custom domain model contains all the information about your custom domains.
Properties
- Name
uuid
- Type
- string
- Description
Unique identifier for the custom domain.
- Name
host
- Type
- string
- Description
The host of the custom domain. This is where your customer wants to access your application. This is the domain where your user will have to add a CNAME record.
- Name
prepend_path
- Type
- string
- Description
An optional path prefix that will be added to all requests forwarded to your upstream. For example, if set to
/sites/client1
, a request toapp.company.com/about
will be forwarded to your upstream as/sites/client1/about
. It can only contain letters, numbers, dashes, and underscores.
- Name
challenge_type
- Type
- string
- Description
The type of challenge used to validate the certificate. It can be one of the following values:
http01
,dns01
. Default value ishttp01
.http01
challenge will issue certificates on demand anddns01
challenge will issue certificates when the_acme-challenge
DNS records are found.The
dns01
challenge is useful if you want to use SaaS Custom Domains Shield, our product that puts Cloudflare DDoS protection and WAF in front of your custom domains.
- Name
redirect_to_www
- Type
- boolean
- Description
Indicates whether the custom domain should redirect to the
www
subdomain. This is useful if you want to redirect all traffic to thewww
subdomain. Default value isfalse
.
- Name
status
- Type
- string
- Description
The status of domain's proxy DNS records. This is the DNS record that points the custom domain to SaaS Custom Domains' proxy fleets. It can be one of the following values:
pending_check
,dns_records_found
,dns_records_not_found
, anddns_check_unnecessary
.
- Name
tls_certificate_issued
- Type
- boolean
- Description
Indicates whether a TLS certificate has been issued for the custom domain.
- Name
acme_challenge_dns_record_status
- Type
- string
- Description
The status of the ACME challenge DNS record. It can be one of the following values:
valid
,pending
,not_found
. This property is only used for custom domains with thedns01
certificate challenge type.
- Name
delegated_domain_control_validation_record_hostname
- Type
- string
- Description
The hostname of the ACME challenge DNS record. This property is only used for custom domains with the
dns01
certificate challenge type.
- Name
delegated_domain_control_validation_record_value
- Type
- string
- Description
The value of the ACME challenge DNS record. This property is only used for custom domains with the
dns01
certificate challenge type.
- Name
instructions_email_sent_at
- Type
- timestamp
- Description
The timestamp when the instructions email was sent to the user. Only applies if you decided to send the instruction email to the user when you created the custom domain.
- Name
instructions_recipient
- Type
- timestamp
- Description
The email address of the user who was sent the instructions email. Only applies if you decided to send the instruction email to the user when you created the custom domain.
- Name
last_dns_check_at
- Type
- timestamp
- Description
The timestamp when the last DNS check was performed.
- Name
created_at
- Type
- timestamp
- Description
The date and time when the custom domain was created.
- Name
updated_at
- Type
- timestamp
- Description
The date and time when the custom domain was last updated.
Retrieve all
This endpoint allows you to retrieve a paginated list of all custom domains belonging to an upstream. By default, 20 custom domains are shown per page.
Optional attributes
- Name
host
- Type
- string
- Description
Find custom domain with the given host.
- Name
page
- Type
- integer
- Description
The page number to retrieve. Default value is
1
.
- Name
per_page
- Type
- integer
- Description
The number of items to retrieve per page. Default value is
20
.
Request
curl -G https://app.saascustomdomains.com/api/v1/accounts/:account_uuid/upstreams/:upstream_uuid/custom_domains \
-H "Authorization: Bearer {token}" \
-d page=7
Response
{
"data": [
{
"uuid": "domain_52069e63",
"host": "app.user.com",
"prepend_path": null,
"created_at": "2022-11-14T13:19:42.193+01:00",
"updated_at": "2023-03-11T08:32:27.239+01:00",
"last_dns_check_at": "2023-03-11T08:32:27.216+01:00",
"status": "dns_records_found",
"tls_certificate_issued": true,
"acme_challenge_dns_record_status": "valid",
"challenge_type": "http01",
"redirect_to_www": false,
"instructions_recipient": null,
"instructions_email_sent_at": null,
"upstream_uuid": "upstream_3f43d84c",
"delegated_domain_control_validation_record_hostname": null,
"delegated_domain_control_validation_record_value": null
},
{
"uuid": "domain_d3ba54e7",
// ...
},
// ...
"pagination": {
"page": 7,
"count": 322
}
}
Create
This endpoint allows you to add a new custom domain to an upstream.
Required attributes
- Name
host
- Type
- string
- Description
The host of the custom domain. This is the domain where your user wants to access your application. Your user will have to add a CNAME record to this domain pointing it to
in.saascustomdomains.com
.
Optional attributes
- Name
instructions_recipient
- Type
- string
- Description
The email address where the instructions to add the CNAME record will be sent. You need to have a valid and confirmed Sender Signature in your SaaS Custom Domain account in order to use this.
- Name
prepend_path
- Type
- string
- Description
An optional path prefix that will be added to all requests forwarded to your upstream. For example, if set to
/sites/client1
, a request toapp.company.com/about
will be forwarded to your upstream as/sites/client1/about
. It can only contain letters, numbers, dashes, and underscores.
- Name
challenge_type
- Type
- string
- Description
The challenge type for domain control verification. Possible values are
http01
anddns01
. If not provided, the default value ishttp01
.
- Name
redirect_to_www
- Type
- boolean
- Description
Indicates whether the custom domain should redirect to the
www
subdomain. This is useful if you want to redirect all traffic to thewww
subdomain. Default value isfalse
.
Request
curl https://app.saascustomdomains.com/api/v1/accounts/:account_uuid/upstreams/:upstream_uuid/custom_domains \
-H "Authorization: Bearer {token}" \
-d host="app.user.com"
Response
{
"uuid": "domain_4e30e873",
"host": "app.user.com",
"prepend_path": null,
"created_at": "2023-03-11T15:38:12.550+01:00",
"updated_at": "2023-03-11T15:38:12.550+01:00",
"last_dns_check_at": null,
"status": "pending_check",
"tls_certificate_issued": false,
"acme_challenge_dns_record_status": "valid",
"challenge_type": "http01",
"redirect_to_www": false,
"instructions_recipient": null,
"instructions_email_sent_at": null,
"upstream_uuid": "upstream_3f43d84c",
"delegated_domain_control_validation_record_hostname": null,
"delegated_domain_control_validation_record_value": null
}
Retrieve
This endpoint allows you to retrieve a custom domain by providing its UUID. Refer to the list at the top of this page to see which properties are included with custom domain objects.
Request
curl https://app.saascustomdomains.com/api/v1/accounts/:account_uuid/upstreams/:upstream_uuid/custom_domains/:domain_uuid \
-H "Authorization: Bearer {token}"
Response
{
"uuid": "domain_3cdfe9a4",
"host": "*.app.com",
"prepend_path": null,
"created_at": "2023-03-11T15:38:12.550+01:00",
"updated_at": "2023-03-11T15:43:16.672+01:00",
"last_dns_check_at": "2023-03-11T15:43:16.667+01:00",
"status": "dns_check_unnecessary",
"tls_certificate_issued": false,
"acme_challenge_dns_record_status": "pending",
"challenge_type": "dns01",
"redirect_to_www": false,
"instructions_recipient": null,
"instructions_email_sent_at": null,
"upstream_uuid": "upstream_3f43d84c",
"delegated_domain_control_validation_record_hostname": "_acme-challenge.testhost.app.com",
"delegated_domain_control_validation_record_value": "_acme-challenge.testhost.app.com.challenges.saascustomdomains.com"
}
Delete
This endpoint allows you to delete custom domains.
Request
curl -X DELETE https://app.saascustomdomains.com/api/v1/accounts/:account_uuid/upstreams/:upstream_uuid/custom_domains/:domain_uuid \
-H "Authorization: Bearer {token}"
Response
{
"message": "Custom domain domain_4e30e873 (app.user.com) deleted."
}
Verify DNS records
This endpoint allows you verify DNS records for a custom domain.
Once the domain has been created, SaaS Custom Domains automatically checks for the presence of the required DNS records.
We check the DNS records immediately, and then in 1, 2, 3, 5, 10, 15, 30, and 60 minutes.
For example, if you create your domain at 9:00, we'd run the checks at the following times: 9:00, 9:01, 9:02, 9:03, 9:05, 9:10, 9:15, 9:30, and 10:00
After that, we check DNS records once every 3 hours. If you need to trigger the check manually or just check if the DNS records are valid, you can use this endpoint.
Response
Returns the host of the custom domain and the status of the DNS records. Status can be one of the following values: valid
, pending
, and invalid
.
If the status is valid
, it means we found the required DNS records and the custom domain is ready to be used.
If the status is pending
, it means we haven't finished checking the DNS records yet. If the status is invalid
, it means we couldn't find the required DNS records and we'll check again later.
Request
curl -X POST https://app.saascustomdomains.com/api/v1/accounts/:account_uuid/upstreams/:upstream_uuid/custom_domains/:domain_uuid/verify_dns_records \
-H "Authorization: Bearer {token}"
Response
{
"message": "DNS records verification complete.",
"dns_status": "valid",
"host": "app.example.com"
}