# Custom Domain Setup

{% hint style="success" %}

### Prerequisites

* A domain you control (e.g. `yourdomain.com`).
* Access to your DNS provider.
  {% endhint %}

{% hint style="info" %}
**Setting up a custom domain for the first time**

If your links are currently under `birdie.so` and you enable a custom domain, all existing `birdie.so` links will continue to work. We will continue to support those links.

**Changing from one custom domain to another**

If you already use a custom domain, for example `capture.acme.com`, and switch to a different one, for example `capture.acme.app`, all links generated under the previous custom domain will stop working.

Make sure to update any support flows that include these links, such as AI bots, macros, etc...
{% endhint %}

## What is Custom Domain?

A custom domain lets you serve Birdie recording pages from your own domain instead of a Birdie domain.

For example, instead of sharing a link like: `https://notion.birdie.so`

You can use your own branded link such as: `https://capture.notion.com`

<figure><img src="/files/EM9D3boeRsJHuVR7fRzC" alt=""><figcaption></figcaption></figure>

The recording experience remains exactly the same for your users. The only difference is that the page is hosted under your company’s domain, which helps maintain brand consistency and can simplify security or compliance requirements.

## How to set it up?&#x20;

### Step 1 – Register Your Domain in Birdie

1. Open your **Birdie Workspace**
2. Go to [**Settings → Incoming Recordings**](https://app.birdie.so/settings) **→ Identity**&#x20;
3. Next to **Custom Domain**, click **Set up**
4. Enter your Apex Domain (without subdomain), e.g.: `yourdomain.com`

Birdie will automatically provision and use a subdomain such as: `capture.yourdomain.com` This subdomain will serve recordings and related assets.

<figure><img src="/files/WXIwogGMfVnccIoBkkyc" alt=""><figcaption></figcaption></figure>

***

### Step 2 – Configure Domain Ownership & Traffic Routing

Add the first CNAME record exactly as provided in the Birdie interface.

Example (values will differ):

<pre><code><strong>capture.yourdomain.com → cname1.birdie.so.
</strong></code></pre>

> ⚠️ Important: \
> Do not modify the target value.\
> Do not replace CNAME with A/AAAA, or ALIAS records.

DNS propagation typically completes within a few minutes but may vary depending on your DNS provider.

Once this record is detected, Birdie will automatically proceed with TLS certificate validation.

<figure><img src="/files/Q8GHovdXCQ0MBXNyolUq" alt=""><figcaption></figcaption></figure>

***

### Step 3 – Configure TLS Certificate Validation

Add the second CNAME record exactly as provided.

Example (values will differ):

```
_f9dcaeb739484679a5764a5ac717a75b.capture.yourdomain.com → _e9fd41ca3c25865c9a3dbdedbe5275e1.jkddrztszm.acm-validations.aws.
```

> ⚠️ Important: \
> Do not modify the target value.\
> Do not replace CNAME with A/AAAA, or ALIAS records.

After DNS propagation, AWS Certificate Manager (ACM) will automatically validate the certificate.\
No additional action is required.

<figure><img src="/files/HhPRyHI45wOHy0vqT8gO" alt=""><figcaption></figcaption></figure>

***

### Step 4 – Automatic Activation

When both CNAMEs resolve correctly:

* Domain ownership is verified
* TLS certificate is issued automatically
* The domain becomes active
* Status updates are reflected in the Birdie UI

No manual approval or support intervention is required.

<figure><img src="/files/Nv73EVNt2XtDdG8BWbL6" alt=""><figcaption></figcaption></figure>

***

### Custom Storage Buckets & CORS (Important)

{% hint style="info" %}
If you **do not** use a custom bucket, you may skip this section.
{% endhint %}

If you use a [custom storage bucket](/birdie-docs/security/storage-location.md) (AWS S3, Google Cloud Storage, or Azure Blob Storage), you must update your CORS configuration.

Add your new fully qualified domain name (FQDN) to the allowed origins list:

```
https://capture.yourdomain.com
```

Example for AWS S3 CORS Policy:

```json
[
    {
        "AllowedHeaders": ["*"],
        "AllowedMethods": ["GET","PUT","POST","HEAD"],
        "AllowedOrigins": [
            "https://*.birdie.so",
            "https://capture.yourdomain.com"
        ],
        "ExposeHeaders": [],
        "MaxAgeSeconds": 3000
    }
]
```

This configuration is required for:

* Video playback
* Recording uploads
* Web recorder access

If not configured correctly, browsers will block requests due to CORS policy restrictions.

***

### Update Your Integrations

After activating your custom domain, update any existing integrations or hardcoded URLs.

For example:

```
yourdomain.birdie.so → capture.yourdomain.com
```

Common locations requiring updates:

* Helpdesk signatures
* Helpdesk macros
* AI bot
* Automated workflows

<details>

<summary>Troubleshooting</summary>

* Ensure both DNS records are configured as **CNAME** (not A, AAAA, or ALIAS)
* Verify DNS propagation: `dig capture.yourdomain.com`
* Confirm there are no conflicting DNS records
* For CORS-related issues, review browser console errors first

</details>

Once validation completes, Birdie will securely serve all recording traffic from your custom domain.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.birdie.so/birdie-docs/request-screen-recordings/installation/custom-domain-setup.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
