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

# Domain verification

> Prove you control the domains your reference patterns claim before they go live in other workspaces.

> Reintersect apps are in developer preview. Names and limits can still change before general
> release.

A reference pattern decides which pasted links your app receives. In a workspace that installs your
app, every matching URL a member pastes is sent to your `resolve` function, including links to
private documents. Reintersect therefore asks link-installable apps to prove they control the domains
their patterns claim before those patterns go live.

## When verification is required

| Install | Verification |
| - | - |
| Private app, in the workspace that owns it | Not required. Patterns go live as soon as the app is installed. |
| Development install | Not required. |
| App installed by link in another workspace | Required: a pattern matches only when its host is under a verified domain. |

Until a domain is verified, the app installs and every other feature works. Links on that domain stay
ordinary links in workspaces that installed the app by link.

## Claim the domains

List the domains in the app's `domains` option. Every host in your patterns should fall under one of
them, and `reintersect check` warns when one doesn't:

```ts theme={null}
export const app = createReintersectApp({
  name: "Launchpad",
  slug: "launchpad",
  domains: ["launchpad.dev", "status.launchpad.dev"],
}).addReference(DeploymentRef);
```

A verified domain covers itself and every subdomain, so a wildcard pattern such as
`https://*.launchpad.dev/:id` is covered by `launchpad.dev`. Domains under `reintersect.com` and
`reintersect.app`, and public suffixes such as `vercel.app`, can't be claimed. An app claims at most
20 domains.

## Verify a domain

<Steps>
  <Step title="Open the domain">
    Go to **Settings → Developer → Apps → your app → Domains**. Each domain from your manifest is listed
    with its status. You can also add domains there.
  </Step>

  <Step title="Add the TXT record">
    Add the TXT record Reintersect shows at your DNS provider. It looks like this, with a token unique
    to your app and domain:

    | Name | Value |
    | - | - |
    | `_reintersect-challenge.launchpad.dev` | `reintersect-app-verification=<token>` |
  </Step>

  <Step title="Check">
    Click **Verify**. Reintersect looks up the record and marks the domain verified. DNS changes can
    take a few minutes to show up; Reintersect also keeps checking on its own for a while (12 attempts
    with growing gaps from one minute).
  </Step>
</Steps>

Keep the record in place after the domain is verified.

## On the consent screen

Admins installing your app see each claimed domain under **Link domains**, marked **Verified** or
**Not verified**, with the note that links to these domains become your app's references.

## Choosing domains

Claim the narrowest set that covers your links. `app.launchpad.dev` is better than `launchpad.dev`
when only the app subdomain serves objects your app can resolve. Wildcards can't span a public
suffix: `*.vercel.app` is rejected, and `*.acme.vercel.app` is allowed when you control
`acme.vercel.app`. See [URL patterns](/references/patterns#rejected-examples).


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