> ## Documentation Index
> Fetch the complete documentation index at: https://docs.myproceeds.xyz/llms.txt
> Use this file to discover all available pages before exploring further.

# Custom domains

> Serve your charge URLs from a hostname you own.

A custom domain changes the origin of your charge URLs. The path stays the same.

```text theme={null}
https://myproceeds.xyz/api/pay/{serviceId}/{slug}
https://pay.acme.com/api/pay/{serviceId}/{slug}
```

Charge URLs switch to your domain only after it is fully active.

## Requirements

* Your account is on the **Pro** plan. On Free and Starter, the **Custom Domain** menu item is disabled and shows an upgrade hint.
* Each service has at most one custom domain.
* A hostname can belong to only one service across Proceeds.

## Add a domain

**1. Open the drawer**

On **Paywalls**, open the service's overflow menu and choose **Custom Domain**.

**2. Enter a hostname**

Use a subdomain you control, such as `pay.acme.com`, and click **Add**.

**3. Create the DNS records**

Add the records shown in the drawer at your DNS provider. The drawer checks again until the domain is `ACTIVE`.

## Configure DNS

| Hostname | Record | Value |
| - | - | - |
| Subdomain (`pay.acme.com`) | `CNAME` | Target shown in the drawer, usually `cname.vercel-dns.com` |
| Apex (`acme.com`) | `A` | `76.76.21.21` |
| Either, if the drawer asks | `TXT` | Ownership challenge shown in the drawer |

> [!NOTE]
>
> Copy record values from the drawer. The recommended target can differ per domain.

## Domain status

| Status | Meaning | What to do |
| - | - | - |
| `PENDING_VERIFICATION` | Another account already claims the hostname | Add the `TXT` record and the pointing record |
| `PENDING_DNS` | Ownership is confirmed. DNS does not point to Proceeds yet | Add or fix the `CNAME` or `A` record |
| `ACTIVE` | Verified, DNS is correct, and the TLS certificate is issued | Nothing |

While the domain is pending, the drawer checks every 15 seconds and whenever you return to the tab. Checking stops at `ACTIVE`. TLS certificates are issued automatically.

## When the domain is active

Copy buttons, integration snippets, and **Test Payment** switch to `https://{hostname}`. Nothing else changes: the service and paywall are still identified by the path, and pricing, networks, and settlement behave the same.

The legacy `/api/x402/pay/...` and `/api/mpp/pay/...` paths also work on your domain.

## What the domain serves

Your domain serves only charge URLs: `/api/pay/...` and the legacy aliases. Every other path returns `404`, so the domain never exposes the dashboard, the marketing site, or the rest of the API.

Responses on your domain send host-only HSTS with a one-day max age. Proceeds does not apply preload HSTS or other policy to your parent zone.

## Hostname rules

Proceeds rejects hostnames that look like platform or discovery hosts:

* Hostnames ending in `myproceeds.xyz`, `vercel.app`, `vercel-dns.com`, or `localhost`
* Hostnames whose first label ends in `-x402` or `-mpp`, such as `weather-x402.acme.com`

## Remove a domain

Open the drawer and click **Remove**. Proceeds releases the hostname, and charge URLs go back to `myproceeds.xyz` immediately. Deleting the service also releases its domain.

> [!WARNING]
>
> Agents holding a charge URL on your domain stop reaching Proceeds once the domain is removed. Update shared links first.

> **[Paywalls](/dashboard/paywalls.md)**
>
> Manage services and charge URLs.

> **[Agent guidance](/guides/api-discovery.md)**
>
> Share charge URLs with agents.

> **[Production checklist](/guides/production-checklist.md)**
>
> Check everything before mainnet.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.