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
Go to the dashboard
Open the dashboard — an anonymous session is created automatically.
- 2
Choose your subdomain
Pick any available name and it becomes yourname.pntr.dev
- 3
Add DNS records
Point your subdomain to an IP address, another domain, or add MX/TXT records.
- 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:
Points to an IPv4 address. Use for servers with a static IP.
Example: 192.0.2.1Points to an IPv6 address. Use for IPv6-only or dual-stack setups.
Example: 2001:db8::1Points to another domain. Target must accept your subdomain. Cannot coexist with other record types.
Example: myapp.vercel.appMail exchange record. Routes email to a mail server. Requires a priority value (lower = higher priority).
Example: mail.example.com (priority: 10)Text record for verification, SPF, DKIM, or other metadata.
Example: v=spf1 include:_spf.google.com ~allNote: 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. Enable email on any subdomain from the dashboard
- 2. Send emails to [email protected] — any address before the @ works
- 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
pntr env create "ci-$GITHUB_RUN_ID" \ --output .pntr-test-env.json \ --jsonpntr env delete \ --manifest .pntr-test-env.json \ --confirm \ --jsonEach 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.
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
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/waitWebhook wait endpoint
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/waitAI 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:
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:
npx @pntr/cli setup-mcpThis authenticates you and adds PNTR to your MCP config automatically.
Claude Code
Remote server (recommended — no local process, signs in with GitHub):
claude mcp add --transport http pntr https://api.pntr.dev/mcpOr run the CLI locally over stdio:
claude mcp add pntr -- npx @pntr/cli serveManual Setup
Add PNTR to your MCP client config:
{ "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_domainsList available domains
check_subdomainCheck availability
list_subdomainsList your subdomains with DNS records
register_subdomainRegister a subdomain, optionally with a DNS record
update_subdomainSet or replace DNS records
delete_subdomainDelete a subdomain
toggle_emailEnable or disable the email inbox
list_emailsList received emails
read_emailRead an email's full content
CLI Usage
The PNTR CLI can be used standalone without MCP integration.
# 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 informationAPI Reference
REST API for programmatic access. Most endpoints require authentication via API token or session.
Authentication
curl -H "Authorization: Bearer YOUR_API_TOKEN" \ https://api.pntr.dev/api/subdomainsEndpoints
/api/check/{domainId}/{name}/api/subdomains/api/subdomains{ "name": "mysubdomain", "domain_id": "uuid", "description": "optional"}/api/subdomains/{id}/records{ "record_type": "CNAME", "record_value": "myapp.vercel.app"}/api/subdomains/{id}/records/{recordId}/api/subdomains/{id}/emails/api/subdomains/{id}/api/subdomains/{id}Limits & Quotas
| Resource | Anonymous | Free (GitHub) | Premium |
|---|---|---|---|
| Subdomains | 1 | 3 | 15 |
| DNS records per subdomain | 5 | 10 | 25 |
| Wildcard DNS | — | — | Yes |
| Email inbox | Yes | Yes | Yes |
| Request capture | 1 subdomain | 1 subdomain | All subdomains |
| Email & request retention | 48 hours | 48 hours | 90 days |
| Parallel TestKit waits | 2 | 2 | 10 |
| Public inbox links | — | Yes | Yes |
| MCP integration | — | Yes | Yes |
| Keep subdomains across browsers | — | Yes | Yes |
| Subdomain length | 1–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.
Questions? Email [email protected] or open an issue on GitHub.