Documentation

Everything you need to set up and manage your subdomains.

On this page

Quick Start

Get your subdomain running in under a minute. No sign-up required:

  1. 1

    Go to the dashboard

    Open the dashboard — an anonymous session is created automatically.

  2. 2

    Choose your subdomain

    Pick any available name and it becomes yourname.pntr.dev

  3. 3

    Add DNS records

    Point your subdomain to an IP address, another domain, or add MX/TXT records.

  4. 4

    You're live

    DNS propagates immediately via Cloudflare. Optionally enable email inbox.

Want to keep it? Sign in with GitHub so your subdomains stay tied to your account instead of this browser, and unlock MCP integration and public inbox links.

DNS Record Types

Choose the right record type for your use case:

A

Points to an IPv4 address. Use for servers with a static IP.

Example: 192.0.2.1
AAAA

Points to an IPv6 address. Use for IPv6-only or dual-stack setups.

Example: 2001:db8::1
CNAME

Points to another domain. Target must accept your subdomain. Cannot coexist with other record types.

Example: myapp.vercel.app
MX

Mail exchange record. Routes email to a mail server. Requires a priority value (lower = higher priority).

Example: mail.example.com (priority: 10)
TXT

Text record for verification, SPF, DKIM, or other metadata.

Example: v=spf1 include:_spf.google.com ~all

Note: CNAME records only work when the target service accepts your subdomain hostname. Compatible services include Vercel, Netlify, GitHub Pages, Railway, and Fly.io.

Email Inbox

Every subdomain can receive emails with a built-in disposable inbox.

How It Works

  1. 1. Enable email on any subdomain from the dashboard
  2. 2. Send emails to [email protected] — any address before the @ works
  3. 3. Emails appear in your inbox instantly

Public Inbox Links

Generate a shareable public link for your inbox. Anyone with the link can view emails (read-only). Revoke access at any time from the dashboard. Requires a GitHub account.

Note: Emails are automatically deleted after 48 hours (90 days on Premium). The inbox is intended for disposable use — testing, verification codes, and temporary communication.

TestKit

Wait for one matching email or webhook delivery from Playwright, Cypress, or CI. PNTR filters on the server and returns the full event, or HTTP 408 when the timeout expires.

See the TestKit examples for complete Playwright and webhook flows.

Environment lifecycle

Create and remove an environment/Shell
pntr env create "ci-$GITHUB_RUN_ID" \  --output .pntr-test-env.json \  --jsonpntr env delete \  --manifest .pntr-test-env.json \  --confirm \  --json

Each environment provisions -mail and -hook sibling subdomains and uses two subdomain quota slots. Delete the environment explicitly when the run finishes.

Wait against existing subdomains

Pass the hostname shown in your dashboard. TestKit resolves and caches its internal ID automatically.

Wait for a matching email/TypeScript
import { PntrTestKit, createRecipient, extractOtp } from "@pntr/testkit";const pntr = new PntrTestKit({ token: process.env.PNTR_TOKEN! });const emailDomain = "testbox.pntr.dev";const recipient = createRecipient(emailDomain, { prefix: "signup" });const startedAt = new Date();const message = await pntr.waitForEmail(emailDomain, {  recipient,  subject: "Verification code",  since: startedAt,  timeoutSeconds: 20,});const otp = extractOtp(message);

Email wait endpoint

Email wait request/Shell
curl -X POST \  -H "Authorization: Bearer YOUR_API_TOKEN" \  -H "Content-Type: application/json" \  -d '{    "recipient": "[email protected]",    "subject_contains": "Verification code",    "since": "2026-07-30T10:00:00Z",    "timeout_seconds": 20  }' \  https://api.pntr.dev/api/subdomains/SUBDOMAIN_ID/emails/wait

Webhook wait endpoint

Webhook wait request/Shell
curl -X POST \  -H "Authorization: Bearer YOUR_API_TOKEN" \  -H "Content-Type: application/json" \  -d '{    "method": "POST",    "path": "/stripe",    "body_contains": "payment_intent.succeeded",    "since": "2026-07-30T10:00:00Z",    "timeout_seconds": 20  }' \  https://api.pntr.dev/api/subdomains/SUBDOMAIN_ID/requests/wait

AI Assistants

PNTR is built to be driven by AI. Point your assistant at the skill file and it can register subdomains, manage DNS, and read the email inbox for you in plain language.

Give your assistant the skill

Paste this into Claude, Cursor, or any assistant that can browse the web:

Assistant prompt/Plain text
Read https://pntr.dev/SKILL.md and follow it to set up PNTR and manage my subdomains.

The skill file (SKILL.md) lists the MCP tools and typical workflows; there is also a machine-readable llms.txt index. To wire up the connection, see MCP Setup below.

MCP Integration

Manage subdomains through Claude, Cursor, or any MCP-compatible AI assistant.

Quick Setup (One Command)

Run this command to automatically configure MCP:

Quick setup/Shell
npx @pntr/cli setup-mcp

This authenticates you and adds PNTR to your MCP config automatically.

Claude Code

Remote server (recommended — no local process, signs in with GitHub):

Remote MCP server/Shell
claude mcp add --transport http pntr https://api.pntr.dev/mcp

Or run the CLI locally over stdio:

Local MCP server/Shell
claude mcp add pntr -- npx @pntr/cli serve

Manual Setup

Add PNTR to your MCP client config:

~/Library/Application Support/Claude/claude_desktop_config.json/JSON
{  "mcpServers": {    "pntr": {      "url": "https://api.pntr.dev/mcp"    }  }}

No token needed. Your MCP client will open a browser window to sign in with GitHub on first connection.

Config file locations

  • Claude Desktop: ~/Library/Application Support/Claude/claude_desktop_config.json
  • Claude Code: ~/.claude.json
  • Cursor: ~/.cursor/mcp.json

Available Tools

list_domains

List available domains

check_subdomain

Check availability

list_subdomains

List your subdomains with DNS records

register_subdomain

Register a subdomain, optionally with a DNS record

update_subdomain

Set or replace DNS records

delete_subdomain

Delete a subdomain

toggle_email

Enable or disable the email inbox

list_emails

List received emails

read_email

Read an email's full content

CLI Usage

The PNTR CLI can be used standalone without MCP integration.

CLI commands/Shell
# Authenticationpntr login          # Authenticate with PNTRpntr logout         # Clear stored credentialspntr status         # Show authentication status# MCP Serverpntr serve          # Start MCP server for AI integrationpntr setup-mcp      # Configure MCP for all detected clients# Versionpntr --version      # Show version information

API Reference

REST API for programmatic access. Most endpoints require authentication via API token or session.

Authentication

Authenticated API request/Shell
curl -H "Authorization: Bearer YOUR_API_TOKEN" \  https://api.pntr.dev/api/subdomains

Endpoints

GET
/api/check/{domainId}/{name}
Check if a subdomain is available
GET
/api/subdomains
List your registered subdomains
POST
/api/subdomains
Create a new subdomain (add DNS records separately)
Request body/JSON
{  "name": "mysubdomain",  "domain_id": "uuid",  "description": "optional"}
POST
/api/subdomains/{id}/records
Add a DNS record to a subdomain
Request body/JSON
{  "record_type": "CNAME",  "record_value": "myapp.vercel.app"}
DELETE
/api/subdomains/{id}/records/{recordId}
Delete a DNS record
GET
/api/subdomains/{id}/emails
List received emails (email must be enabled)
PUT
/api/subdomains/{id}
Update a subdomain's description
DELETE
/api/subdomains/{id}
Delete a subdomain

Limits & Quotas

ResourceAnonymousFree (GitHub)Premium
Subdomains1315
DNS records per subdomain51025
Wildcard DNSYes
Email inboxYesYesYes
Request capture1 subdomain1 subdomainAll subdomains
Email & request retention48 hours48 hours90 days
Parallel TestKit waits2210
Public inbox linksYesYes
MCP integrationYesYes
Keep subdomains across browsersYesYes
Subdomain length1–63 characters

Premium is $19/month or $180/year. It raises subdomain and DNS capacity, request-capture coverage, retention, and parallel TestKit waits. The free tier is free forever. See pricing for full plan details.

Subdomain Rules

  • • Must contain only lowercase letters, numbers, and hyphens
  • • Cannot start or end with a hyphen
  • • Cannot contain consecutive hyphens
  • • Some names are reserved (www, api, mail, etc.)

FAQ

Do I need to sign up?

No. You can create a subdomain anonymously without any account. Sign in with GitHub later to keep your subdomains tied to your account and unlock MCP integration and public inbox links.

How long until my subdomain is active?

DNS changes propagate immediately through Cloudflare. Your subdomain should be accessible within seconds.

Can I use HTTPS?

Yes. All subdomains get automatic SSL via Cloudflare. HTTPS works out of the box.

How does the email inbox work?

Enable email on any subdomain and you can receive emails at any address @yourname.pntr.dev. Emails are automatically deleted after 48 hours (90 days on Premium). The inbox is ideal for testing, verification codes, and temporary communication.

What are public inbox links?

You can generate a shareable link that gives read-only access to your inbox. Useful for sharing incoming emails with others. You can revoke the link at any time. Requires a GitHub account.

Why doesn't my CNAME work?

CNAME records only work when the target server accepts requests for your subdomain. Use services like Vercel, Netlify, or GitHub Pages that support custom domains. CNAME records also cannot coexist with other record types on the same subdomain.

Is this really free?

Yes. Anonymous and GitHub-authenticated usage is free. Premium tiers are available for users who need more subdomains.

What happens to my anonymous subdomain?

Anonymous subdomains are tied to your browser session. If you clear cookies or switch browsers, you may lose access. Sign in with GitHub to keep your subdomains permanently.