Use your custom domain
Learn how to bring your own custom domain to Stripe Checkout, Payment Links, and customer portal.
If you’re using the Stripe-hosted page for Checkout, you can add your own custom domain to Stripe. Adding custom domains is a paid feature. For information about cost, see Checkout’s Pricing.
Add your custom domain to the Stripe Dashboard
Decide which subdomain to use with your Checkout Sessions, Payment Links, and customer portal.
Note
If your domain is example.
, we recommend using payments.
as your custom subdomain. You can replace payments
with anything you like, as long it’s a valid subdomain. You can’t use a path like example.
and must specify a subdomain of your existing domain.
After you decide on a subdomain, visit the Custom domains settings page to start the domain connection process.
On the settings page click Add your domain.
In the pop-up, enter your desired subdomain. Click Add when you’re done. You’ll see the pop-up update with instructions for setting up your DNS records.
Your custom domain is activated automatically when your DNS records are verified. To disable this behaviour, untick the Switch to this domain once added tickbox.
When will my domain be added?
When your domain is in the Adding.
state, we wait to verify your DNS records that you set up in the next step. After Stripe verifies the DNS records, we create TLS certificates for your subdomain, set up the correct CDN routing, and then your domain is ready
to enable and use.
Identify your DNS Provider
To start, figure out what service is managing your DNS records, so you know exactly where to login and create the new records.
If you already know your DNS provider, you can move on to the next section.
Often, it’s the same place you registered your domain, but sometimes the DNS provider is different from your domain registrar.
If you’re not certain who your DNS provider is, try looking up your domain’s nameservers, replacing stripe.com with your own domain in this command:
nslookup -querytype=NS stripe.com
You’ll see a list of nameservers for your domain in the output. Here’s some example output for stripe.com:
# Looks like AWS is providing our DNS here: stripe.com nameserver = ns-423.awsdns-52.com. stripe.com nameserver = ns-705.awsdns-24.net. stripe.com nameserver = ns-1087.awsdns-07.org. stripe.com nameserver = ns-1882.awsdns-43.co.uk.
If you’re more comfortable using a browser-based tool, go to MXLookup’s DNS Lookup tool and enter your domain. It might be able to tell you who your DNS provider is (but not always).
Create required DNS records
In this section, you’ll create the DNS records you need to connect your domain. As you go through each step, check each checkbox to keep track of where you are in the process.
Select the tab that matches your DNS provider from the tabs below—this gives you specific, guided instructions for creating the required DNS records. If your DNS provider isn’t an option, follow the Standard instructions:
Now that you’ve created your DNS records and verified them, Stripe verifies the connection and provisions your domain on our end. We’ll send you an email and a Dashboard notification when the domain is ready for you to enable it. You can also visit the Dashboard settings at any time to see the current status of your custom domain connection.
OptionalTest your custom domain
Create a test payment link
You receive a notification when your custom domain is added and enabled for testing.
- Go to the Dashboard settings.
- Verify you have an
Added
indicator above your custom domain name. - Create a payment link in a sandbox.
You see your new custom domain in the details page of your newly created payment link.
OptionalRemoving your custom domain
If you need to remove your custom domain for any reason, you can. If you remove your custom domain, you’ll need to remove any DNS records you created for your custom subdomain and follow this guide again to add it back.
To remove your custom domain completely:
- Go to the Dashboard settings for custom domains.
- Click the Remove button.
- Read the pop-up confirmation, and click Remove to confirm the removal.
- Log in to your DNS provider and delete the two DNS records you previously created for your custom subdomain.
Note
After you cancel your subscription, payment links and the customer portal link that use your custom domain stop working. You can copy and share new buy.
or billing.
links for each of your existing links.
OptionalUsing custom domains with Connect
When combining custom domains with a Connect integration, we match the same rules as our other branding settings:
Connect integration type | Description | Which account’s custom domain is used? |
---|---|---|
Destination charge | Your integration uses payment_ . See docs to read more. | The platform account’s domain. |
on_ | Similar to the destination charge, but the settlement merchant is different. See docs to read more. | The connected account’s domain. |
Direct charge | Your integration passes in the connected account ID in the Stripe-Account header. See docs to read more. | The connected account’s domain. |
Separate charges and transfers | Charges and transfers are handled separately from the Checkout Session. See docs to read more. | The platform account’s domain. |
OptionalTroubleshooting your integration
If you’ve gone through this guide and activated your custom domain in live mode but still aren’t seeing it used for your Checkout Sessions, you might be using an unsupported Checkout integration type.
Stripe has three types of Checkout integrations, and we only support server-side redirects today. Use this table to figure out what kind of integration you’re using:
Integration type | You’re using this type if… | Notes | Works with custom domains? |
---|---|---|---|
Client-only integration | If you’re not creating Checkout Sessions from your server and are only using client-side stripe.redirectToCheckout and providing items such as SKUs or Plans. | This integration path is deprecated. | ✗ No |
Server-side Checkout Session creation and client-side stripe. | If you’re creating Checkout Sessions from your server and redirecting your customers client-side by using stripe.redirectToCheckout and providing the Checkout Session ID. | This was the standard documented integration path before September 2021. | ✗ No |
Server-side Checkout Session creation and redirect | If you’re creating Checkout Sessions and redirecting your customers to the returned URL all server-side. See the Accept a payment guide for an example. | This is the standard documented integration path since September 2021. | ✓ Yes |
If you’re using an unsupported integration type, use our Accept a payment guide to switch to using server-side redirects so you can start using custom domains.
OptionalTroubleshooting CAA DNS records
The following CAA DNS records issues can occur when you attempt to add a custom domain to Checkout:
- Your CAA record doesn’t include
letsencrypt.
as a valid CA issuer.org - You have a CAA record at the same level as your custom domain name.
Your CAA record doesn’t include letsencrypt.org as a valid CA issuer
Stripe uses Let’s Encrypt to generate TLS certificates for your custom domain. This ensures that all requests to your custom domain are secure and encrypted.
As a result, if you have an existing CAA
DNS record, you need to include letsencrypt.
as a valid issuer.
To add Let’s Encrypt as an issuer:
- Go to your DNS panel and find the existing
CAA
record for your domain, and make a note of its current values. - Add a new record at the same level as your other
CAA
records, and enter these values:- Name: This should be the same as your other CAA records. There is usually a name of
@
for CAA records on the root of the domain (for example,powdur.
).me - Flags:
0
- Tag:
issue
- Value:
letsencrypt.
org - TTL: 3600 seconds (1 hour) is a good default.
- Name: This should be the same as your other CAA records. There is usually a name of
- Save the record.
Most DNS updates take effect within an hour, but could take up to 72 hours to update globally.
To read more about setting up Let’s Encrypt CAA records, see their CAA guide.
Your CAA record is at the same level as your custom domain name
If you received an error in the Dashboard about your CAA record being at the same level as your custom domain name, there’s already an existing CAA
DNS record for the custom domain name that you’re trying to connect to Checkout. For example, if you’re trying to connect checkout.powdur.me to Checkout but there’s already a CAA
DNS record at that domain, Stripe returns an error.
You have a few options for fixing this issue:
- You can move the
CAA
record down a level:- If you want a custom domain name of checkout.powdur.me, you can create a duplicate
CAA
record with the same values at powdur.me instead. - Once the new
CAA
record has propagated, you can safely remove the conflictingCAA
record from your DNS provider. - Once the removal has propagated, you can try to add your custom domain to the Dashboard again.
- If you want a custom domain name of checkout.powdur.me, you can create a duplicate
- You can choose a custom domain name above your
CAA
record.- If your
CAA
record lives at checkout.powdur.me, you could choose a custom domain name like pay.checkout.powdur.me.
- If your
OptionalTroubleshooting a blocked domain
Cloudflare, our domain provider, occasionally blocks some domains from being automatically added to Cloudflare as part of an additional security check. If you’re seeing an error message in the Dashboard settings about Cloudflare blocking your domain, you can email abusereply@cloudflare.com to resolve the issue.
When emailing Cloudflare, copy and paste this email template and change any of the bold [placeholders] to your own information:
To: abusereply@cloudflare.com
Subject: Unblock request for [insert your domain name]
Cloudflare,
We’re in the process of adding a custom domain name to Stripe Checkout that leverages Cloudflare. It’s currently blocked by you. Can you please unblock this hostname for us?
Domain/Hostname we are attempting to add: [insert your domain name]
Association with the domain: [provide an explanation of your association with/ownership of the domain]
Please let us know if you have additional questions.
Thanks,[Your name]