# Custom Domains

Partners can serve the Bullseye tracking pixel from their own domain instead of the default Bullseye domain. This provides a fully whitelabel experience: the script loads from your domain, and clients see no Bullseye branding in the script URL.

## Overview

When you configure a custom domain:

* The tracking pixel script is served from your domain (e.g., `track.yourdomain.com`)
* DNS verification ensures you control the domain
* All sub-organizations under your partner account use this domain for their pixel scripts

## Setting a Custom Domain

1. Call **PUT** `/partner/domain` with your desired domain:

```json
{
  "domain": "track.yourdomain.com"
}
```

2. The domain is set and marked as pending verification. You must complete DNS verification before the domain becomes active.

## DNS Verification Process

Verification requires adding two DNS records to your domain. Retrieve the required values with **GET** `/partner/domain/verification`.

### Required Records

| Record Type | Purpose                                                           |
| ----------- | ----------------------------------------------------------------- |
| CNAME       | Points your subdomain to Bullseye's script-serving infrastructure |
| TXT         | Proves domain ownership                                           |

The verification response includes:

* `cnameTarget` — The target for your CNAME record
* `verificationRecord` — The value for your TXT record
* `instructions` — Human-readable verification steps
* `dnsRecords` — Array of record details (type, name, value)

### Adding DNS Records

Add the records at your DNS provider (e.g., Cloudflare, Route 53, GoDaddy):

**CNAME record:**

* Name: Your subdomain (e.g., `track` for `track.yourdomain.com`)
* Type: CNAME
* Value: The `cnameTarget` from the verification response

**TXT record:**

* Name: The record name from the verification response (often the subdomain or `_bullseye-verify.yourdomain.com`)
* Type: TXT
* Value: The `verificationRecord` from the verification response

### Verification Steps

1. Add the CNAME record pointing to the provided target
2. Add the TXT record with the provided verification value
3. Wait for DNS propagation (see below)
4. Call **POST** `/partner/domain/verify` to complete verification

The verify endpoint checks that both records are correctly configured. If successful, your domain is marked as verified and the tracking script will be served from it.

## DNS Propagation Timeline

DNS changes can take time to propagate globally:

* **Typical** — 15 minutes to 2 hours
* **Maximum** — Up to 48 hours in some cases

If verification fails, wait and retry. Use a DNS lookup tool to confirm your records are visible before calling the verify endpoint.

## After Verification

Once verified:

* **GET** `/partner/script-config` returns `scriptDomain` with your custom domain and `scriptDomainVerified: true`
* Pixel scripts for your sub-organizations use your domain in the script URL
* Clients installing the pixel will load it from your domain

## Changing or Removing the Domain

To change the domain, call **PUT** `/partner/domain` with a new domain. The previous domain is replaced and the new one must be verified.

To remove the custom domain, contact Bullseye support. After removal, the default Bullseye domain is used for script serving.

## Troubleshooting

| Issue                  | Possible cause                                                              |
| ---------------------- | --------------------------------------------------------------------------- |
| Verification fails     | DNS records not yet propagated; incorrect record values; wrong record names |
| Script fails to load   | CNAME not correctly configured; SSL certificate not yet provisioned         |
| Wrong domain in script | Verification not completed; script config cached                            |

Ensure both CNAME and TXT records are correct and propagated before calling the verify endpoint.


---

# 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.bullseye.so/partner-program/custom-domains.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.
