Hoist
Domain registration, DNS management, and code deployment for AI agents. Register domains and deploy in one command.
Getting Started
Introduction 60-Second Quickstart Authentication Walkthrough Use Cases Hoist vs Others
Auth
POST /auth/signupPOST /auth/loginGET /auth/whoami
Domains
POST /domains/searchPOST /domains/checkoutGET /domains/tldsPOST /domains/registerGET /domainsGET /domains/:domainPOST …/dnsDEL …/dns/:id
Payments
GET /pricingPOST /confirm-paymentGET /payment-status
Deploy
POST /deployPOST /deploy/claimGET /deploy/:idGET /deploys
MCP Server
Setup Tools Reference
Tools
TLD Pricing Try It Live
Resources
Full Workflow Errors FAQ
Hoist API Reference
Register domains, manage DNS, deploy code, and go live — all via REST API. Built for AI agents and developers who ship fast.
BASE URL https://hoist-g8do.polsia.app/api
CLI-first domain registration and hosting for AI agents
Search 14 TLDs from $2.99/yr. Register, configure DNS, and deploy — no account required to start.
Check availability
or Browse all domains on homepage →· Join the waitlist
Getting Started in 60 Seconds
Three API calls. That's it. No dashboard, no config files, no waiting for approval.
1
Get your API key
POST /api/auth/signup
Send email + password. Get back a hoist_ prefixed API key instantly.
2
Search domains
POST /api/domains/search
Send a name, get availability across 14 TLDs with prices. No auth needed.
3
Register & deploy
POST /api/domains/register
Pick a domain, pay via Stripe, then deploy code from a GitHub repo.
🔑 Authentication
Hoist uses API key authentication. Keys are prefixed with hoist_ and sent as Bearer tokens. Some endpoints (domain search, pricing, checkout) are public — no auth needed. Endpoints that manage your account or domains require authentication.
Authorization Header
Authorization: Bearer hoist_your_api_key_here
Get your API key by signing up or logging in. The key is returned in the response body.
🚀 Quickstart
Get from zero to a registered domain in 3 API calls.
1
Create an account
Sign up to get your API key. You'll use this for all authenticated requests.
curl Copy
curl -X POST https://hoist-g8do.polsia.app/api/auth/signup \-H "Content-Type: application/json" \-d '{"email": "[email protected]", "password": "secure_password_123"}'
Response
{"user": { "id": 1, "email": "[email protected]" },"api_key": "hoist_a1b2c3d4e5f6...","hint": "Use this key in Authorization: Bearer "}
2
Search for a domain
Check if your domain is available. Send just the name to search all TLDs, or include the extension for a specific check.
curl Copy
curl -X POST https://hoist-g8do.polsia.app/api/domains/search \-H "Content-Type: application/json" \-d '{"name": "myproject"}'
Response — Multi-TLD search
{"name": "myproject","results": [ { "domain": "myproject.dev", "available": true, "price_formatted": "$14.99/yr" }, { "domain": "myproject.io", "available": true, "price_formatted": "$39.99/yr" }, { "domain": "myproject.com", "available": false } ] }
3
Register your domain
Register and pay — you'll get a Stripe checkout URL to complete payment.
curl Copy
curl -X POST https://hoist-g8do.polsia.app/api/domains/register \-H "Content-Type: application/json" \-H "Authorization: Bearer hoist_your_api_key" \-d '{"domain": "myproject.dev"}'
Response
{"success": true,"domain": "myproject.dev","payment": {"status": "pending","amount_cents": 1499,"payment_url": "https://buy.stripe.com/...","instructions": "Complete payment at the URL above" } }
Ready to try it? Search for your first domain — no account needed.
Search a domain →
💡 Use Cases
Hoist is built for programmatic domain management. Here's how developers and AI agents use it.
🤖
Register a Domain for Your AI Agent
Give your AI agent its own identity. Search for available domains, register one, and configure DNS — all through the API or MCP tools. Your agent can do it autonomously via Claude Desktop or Cursor.
search_domain → register_domain → manage_dns
🚀
Deploy a Static Site via API
Ship a landing page, docs site, or portfolio in one API call. Point it to a GitHub repo, Hoist builds and deploys it. Anonymous deploys work with zero auth — perfect for prototyping.
POST /api/deploy
🌐
Set Up DNS for Agent Infrastructure
Point your domain to any server, add CNAME records for CDNs, set up MX records for email. Full DNS management via API — A, AAAA, CNAME, MX, TXT, NS, and SRV records.
POST /api/domains/:domain/dns
Example: AI Agent Registers a Domain
Node.js — AI agent workflowCopy
// Your AI agent decides it needs a domain for a new project const HOIST = 'https://hoist-g8do.polsia.app/api';// Step 1: Search (no auth required) const search = await fetch(`${HOIST}/domains/search`, {method: 'POST',headers: { 'Content-Type': 'application/json' },body: JSON.stringify({ name: 'my-agent' }) }).then(r => r.json());// Step 2: Pick the cheapest available domain const pick = search.results .filter(r => r.available) .sort((a, b) => a.price_cents - b.price_cents)[0];// Step 3: Register via guest checkout (email only, no account needed) const reg = await fetch(`${HOIST}/domains/checkout`, {method: 'POST',headers: { 'Content-Type': 'application/json' },body: JSON.stringify({domain: pick.domain,email: '[email protected]' }) }).then(r => r.json()); console.log(`Registered ${pick.domain} for ${pick.price_formatted}`); console.log(`Payment: ${reg.checkout_url}`);
Example: Deploy a Static Site in One Call
curl — anonymous deploy (no account needed)Copy
# Deploy a GitHub repo instantly — no signup required curl -X POST https://hoist-g8do.polsia.app/api/deploy \-H "Content-Type: application/json" \-d '{"source_url": "https://github.com/user/landing-page"}' # Response: temporary URL + claim token # { # "deployment": { # "slug": "abc123", # "status": "queued", # "claim_token": "tok_abc123..." # }, # "message": "Deploying to abc123.hoist-g8do.polsia.app" # }
Example: Set Up DNS for Agent Infrastructure
curl — configure DNS recordsCopy
# Point your domain to a server curl -X POST https://hoist-g8do.polsia.app/api/domains/my-agent.dev/dns \-H "Authorization: Bearer hoist_your_api_key" \-H "Content-Type: application/json" \-d '{"type": "A", "name": "@", "value": "203.0.113.50", "ttl": 3600}' # Add a CNAME for www curl -X POST https://hoist-g8do.polsia.app/api/domains/my-agent.dev/dns \-H "Authorization: Bearer hoist_your_api_key" \-H "Content-Type: application/json" \-d '{"type": "CNAME", "name": "www", "value": "my-agent.dev", "ttl": 3600}' # Set up email with MX records curl -X POST https://hoist-g8do.polsia.app/api/domains/my-agent.dev/dns \-H "Authorization: Bearer hoist_your_api_key" \-H "Content-Type: application/json" \-d '{"type": "MX", "name": "@", "value": "mail.example.com", "priority": 10}'
📊 Hoist vs Other Domain APIs
How Hoist compares to GoDaddy, Namecheap, and Cloudflare for programmatic domain registration.
| Feature | Hoist | GoDaddy API | Namecheap API | Cloudflare Registrar |
|---|---|---|---|---|
| API format | REST / JSON | REST / JSON | XML-based | REST / JSON |
| Account required to search | No | Yes | Yes | Yes |
| Minimum domain requirement | None | Reseller agreement | 20+ domains | None |
| Guest checkout (no account) | Yes | No | No | No |
| Built-in code deployment | Yes | No | No | Via Pages (separate) |
| MCP server for AI agents | Yes (6 tools) | No | No | No |
| Anonymous deploys | Yes (24hr temp URL) | N/A | N/A | No |
| DNS management via API | Yes (7 record types) | Yes | Limited | Yes |
| Pricing starts at | $2.99/yr (.site) | $11.99/yr (.com) | $8.88/yr (.com) | At cost |
| Setup complexity | 1 API call | Application + approval | IP whitelisting | Account + nameserver transfer |
| Built for AI agents | Yes (core design) | No | No | No |
👤 Auth
Create accounts and manage API keys. Passwords must be at least 8 characters.
POST /api/auth/signup Public ▾
Create a new account and receive an API key. Email must be unique.
Request Body
| Field | Type | Required | Description |
|---|---|---|---|
| string | required | Account email address | |
| password | string | required | Minimum 8 characters |
curl Node.js Python
RequestCopy
curl -X POST https://hoist-g8do.polsia.app/api/auth/signup \-H "Content-Type: application/json" \-d '{"email": "[email protected]", "password": "secure_pass_123"}'
Node.jsCopy
const res = await fetch('https://hoist-g8do.polsia.app/api/auth/signup', {method: 'POST',headers: { 'Content-Type': 'application/json' },body: JSON.stringify({email: '[email protected]',password: 'secure_pass_123' }) });const { api_key } = await res.json();
PythonCopy
import requests res = requests.post('https://hoist-g8do.polsia.app/api/auth/signup', json={'email': '[email protected]','password': 'secure_pass_123'}) api_key = res.json()['api_key']
Response — 201
{"user": { "id": 1, "email": "[email protected]" },"api_key": "hoist_a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6","hint": "Use this key in Authorization: Bearer "}
POST /api/auth/login Public ▾
Login with existing credentials. Returns a new API key on every login.
Request Body
| Field | Type | Required | Description |
|---|---|---|---|
| string | required | Account email | |
| password | string | required | Account password |
RequestCopy
Node.jsCopy
const res = await fetch('https://hoist-g8do.polsia.app/api/auth/login', {method: 'POST',headers: { 'Content-Type': 'application/json' },body: JSON.stringify({ email: '[email protected]', password: 'secure_pass_123' }) });const { api_key } = await res.json();
PythonCopy
import requests res = requests.post('https://hoist-g8do.polsia.app/api/auth/login', json={'email': '[email protected]','password': 'secure_pass_123'}) api_key = res.json()['api_key']
Response — 200
{"user": { "id": 1, "email": "[email protected]" },"api_key": "hoist_new_key_generated_on_login..."}
GET /api/auth/whoami Auth Required ▾
Get your account info, domain/deployment counts, and active API keys.
curlCopy
curl https://hoist-g8do.polsia.app/api/auth/whoami \-H "Authorization: Bearer hoist_your_api_key"
Response — 200
{"user": { "id": 1, "email": "[email protected]" },"stats": { "api_keys": 2, "domains": 3, "deployments": 7 },"api_keys": [ { "id": 1, "name": "default", "prefix": "hoist_a1b2...", "created_at": "2026-03-01T..." } ] }
🌐 Domains
Search for domains, register them, manage DNS records. Search and checkout are public — everything else needs auth.
POST /api/domains/search Public ▾
Check domain availability. Send domain for a single TLD check, or name (without extension) to search across all 14 supported TLDs.
Request Body
| Field | Type | Required | Description |
|---|---|---|---|
| domain | string | option A | Full domain with TLD (e.g. "myapp.dev") |
| name | string | option B | Name only — searches all TLDs (e.g. "myapp") |
Single TLDCopy
curl -X POST https://hoist-g8do.polsia.app/api/domains/search \-H "Content-Type: application/json" \-d '{"domain": "myproject.dev"}'
Node.js — Multi-TLDCopy
const res = await fetch('https://hoist-g8do.polsia.app/api/domains/search', {method: 'POST',headers: { 'Content-Type': 'application/json' },body: JSON.stringify({ name: 'myproject' }) });const { results } = await res.json();const available = results.filter(r => r.available);
Python — Multi-TLDCopy
import requests res = requests.post('https://hoist-g8do.polsia.app/api/domains/search', json={'name': 'myproject'}) available = [r for r in res.json()['results'] if r['available']]
Response — Single TLD
{"available": true,"domain": "myproject.dev","price_cents": 1499,"price_formatted": "$14.99/yr","tld": ".dev"}
POST /api/domains/checkout Public ▾
Guest-friendly checkout. No account needed — auto-creates one. Returns a Stripe checkout URL.
Request Body
| Field | Type | Required | Description |
|---|---|---|---|
| domain | string | required | Domain to register (e.g. "myapp.dev") |
| string | required | Email for account creation |
curlCopy
curl -X POST https://hoist-g8do.polsia.app/api/domains/checkout \-H "Content-Type: application/json" \-d '{"domain": "myapp.dev", "email": "[email protected]"}'
Response — 200
{"success": true,"checkout_url": "https://buy.stripe.com/...","domain": "myapp.dev","price_cents": 1499,"price_formatted": "$14.99/yr"}
GET /api/domains/tlds Public ▾
List all supported TLDs with pricing. No parameters needed.
curlCopy
curl https://hoist-g8do.polsia.app/api/domains/tlds
Response — 200
{"tlds": [ { "tld": ".site", "price_cents": 299, "price_formatted": "$2.99/yr" }, { "tld": ".com", "price_cents": 1299, "price_formatted": "$12.99/yr" }, { "tld": ".ai", "price_cents": 7999, "price_formatted": "$79.99/yr" } ],"count": 14}
POST /api/domains/register Auth Required ▾
Register a domain. Returns a Stripe payment URL. Domain activates after payment.
Request Body
| Field | Type | Required | Description |
|---|---|---|---|
| domain | string | required | Domain to register (e.g. "myapp.dev") |
curlCopy
curl -X POST https://hoist-g8do.polsia.app/api/domains/register \-H "Content-Type: application/json" \-H "Authorization: Bearer hoist_your_api_key" \-d '{"domain": "myapp.dev"}'
Response — 200
{"success": true,"domain": "myapp.dev","price_cents": 1499,"payment": {"status": "pending","amount_cents": 1499,"payment_url": "https://buy.stripe.com/...","instructions": "Complete payment at the URL above" } }
GET /api/domains Auth Required ▾
List all your registered domains with DNS record and deployment counts.
curlCopy
curl https://hoist-g8do.polsia.app/api/domains \-H "Authorization: Bearer hoist_your_api_key"
Response — 200
{"domains": [ {"domain": "myapp.dev","status": "registered","registered_at": "2026-03-01T12:00:00Z","dns_record_count": 3,"deployment_count": 2 } ],"count": 1}
GET /api/domains/:domain Auth Required ▾
Get domain details including DNS records and recent deployments.
curlCopy
curl https://hoist-g8do.polsia.app/api/domains/myapp.dev \-H "Authorization: Bearer hoist_your_api_key"
Response — 200
{"domain": "myapp.dev","status": "registered","dns_records": [ { "type": "A", "name": "@", "value": "1.2.3.4", "ttl": 3600 } ],"deployments": [ { "deploy_id": "dep_abc123", "status": "live", "deploy_url": "https://myapp.dev" } ] }
POST /api/domains/:domain/dns Auth Required ▾
Add a DNS record. Supports A, AAAA, CNAME, MX, TXT, NS, SRV record types.
Request Body
| Field | Type | Required | Description |
|---|---|---|---|
| type | string | required | A, AAAA, CNAME, MX, TXT, NS, SRV |
| name | string | required | Record name (@ for root, or subdomain) |
| value | string | required | Record value (IP, hostname, etc.) |
| ttl | number | optional | TTL in seconds (default: 3600) |
| priority | number | optional | Priority for MX/SRV records |
curlCopy
curl -X POST https://hoist-g8do.polsia.app/api/domains/myapp.dev/dns \-H "Content-Type: application/json" \-H "Authorization: Bearer hoist_your_api_key" \-d '{"type": "A", "name": "@", "value": "1.2.3.4", "ttl": 3600}'
DELETE /api/domains/:domain/dns/:id Auth Required ▾
Delete a DNS record by ID.
curlCopy
curl -X DELETE https://hoist-g8do.polsia.app/api/domains/myapp.dev/dns/42 \-H "Authorization: Bearer hoist_your_api_key"
Response — 200
{ "deleted": true }
💳 Payments
Pricing data, payment confirmation, and status checks. Stripe handles the checkout.
GET /api/pricing Public ▾
Get all TLD pricing with Stripe payment links. Use this to build your own checkout UI.
curlCopy
curl https://hoist-g8do.polsia.app/api/pricing
Response — 200
{"currency": "usd","billing_period": "yearly","tlds": [ {"tld": ".site","price_cents": 299,"price_usd": "2.99","price_formatted": "$2.99/yr","billing_period": "yearly","payment_link": "https://buy.stripe.com/..." } ],"count": 14}
POST /api/domains/confirm-payment Auth Required ▾
Confirm payment and activate a domain. Usually called after Stripe checkout completes, but can also be triggered manually.
Request Body
| Field | Type | Required | Description |
|---|---|---|---|
| domain | string | required | Domain to confirm |
| session_id | string | optional | Stripe checkout session ID |
curlCopy
curl -X POST https://hoist-g8do.polsia.app/api/domains/confirm-payment \-H "Content-Type: application/json" \-H "Authorization: Bearer hoist_your_api_key" \-d '{"domain": "myapp.dev"}'
GET /api/domains/payment-status/:domain Auth Required ▾
Check the payment status for a specific domain.
curlCopy
curl https://hoist-g8do.polsia.app/api/domains/payment-status/myapp.dev \-H "Authorization: Bearer hoist_your_api_key"
Response — 200
{"domain": "myapp.dev","domain_status": "registered","payment_status": "paid","amount_cents": 1499,"paid_at": "2026-03-01T12:30:00Z"}
🚢 Deploy
Deploy code instantly. No account needed — anonymous deploys get a temporary URL that expires in 24 hours. Sign up to keep it permanently and add a custom domain.
POST /api/deploy Auth Optional ▾
Anonymous deploy (no auth): Just send source_url — no account needed. Returns a temporary URL (slug.hoist-g8do.polsia.app) that expires in 24 hours, plus a claim_token to claim it later.
Authenticated deploy: Send domain + source_url with your API key to deploy to a registered domain.
Request Body
| Field | Type | Required | Description |
|---|---|---|---|
| source_url | string | required | GitHub repo URL or local path |
| domain | string | optional | Target domain (required if authenticated, ignored for anonymous) |
| source_type | string | optional | Default: "git" |
Anonymous Deploy (no auth needed)Copy
curl -X POST https://hoist-g8do.polsia.app/api/deploy \-H "Content-Type: application/json" \-d '{"source_url": "https://github.com/user/repo"}' # With auth (deploy to your domain): curl -X POST https://hoist-g8do.polsia.app/api/deploy \-H "Content-Type: application/json" \-H "Authorization: Bearer hoist_your_api_key" \-d '{"domain": "myapp.dev", "source_url": "https://github.com/user/repo"}'
Node.jsCopy
const res = await fetch('https://hoist-g8do.polsia.app/api/deploy', {method: 'POST',headers: {'Content-Type': 'application/json','Authorization': `Bearer ${apiKey}` },body: JSON.stringify({domain: 'myapp.dev',source_url: 'https://github.com/user/repo' }) });const { deployment } = await res.json(); console.log('Deploy ID:', deployment.deploy_id);
PythonCopy
import requests res = requests.post('https://hoist-g8do.polsia.app/api/deploy', headers={'Authorization': f'Bearer {api_key}'}, json={'domain': 'myapp.dev','source_url': 'https://github.com/user/repo' } ) deploy_id = res.json()['deployment']['deploy_id']
Response — 201 (anonymous deploy)
{"deployment": {"deploy_id": "dpl_a1b2c3d4e5f6","slug": "abc123","status": "queued","source_url": "https://github.com/user/repo","expires\_at": "2026-03-19T12:00:00Z","claim_token": "tok_abc123...","anonymous": true },"message": "Deploying to abc123.hoist-g8do.polsia.app — expires in 24 hours."}
POST /api/deploy/claim Auth Required ▾
Claim an anonymous deploy to make it permanent. Removes the 24-hour expiry and associates it with your account.
Request Body
| Field | Type | Required | Description |
|---|---|---|---|
| claim_token | string | one of | Claim token from the anonymous deploy response |
| slug | string | one of | Slug of the anonymous deploy (e.g., "abc123") |
curlCopy
curl -X POST https://hoist-g8do.polsia.app/api/deploy/claim \-H "Content-Type: application/json" \-H "Authorization: Bearer hoist_your_api_key" \-d '{"claim_token": "tok_abc123...", "slug": "abc123"}'
Response — 200
{"deployment": {"deploy_id": "dpl_a1b2c3d4e5f6","slug": "abc123","status": "live","deploy_url": "https://abc123.hoist-g8do.polsia.app","claimed": true,"expires_at": null },"message": "Deploy claimed! It will no longer expire."}
GET /api/deploy/:deployId Auth Optional ▾
Poll deployment status. Works for anonymous deploys without auth (or with ?claim_token=). Status transitions: queued → building → deploying → live or failed.
curlCopy
curl https://hoist-g8do.polsia.app/api/deploy/dep\_a1b2c3d4 \-H "Authorization: Bearer hoist_your_api_key"
Response — 200
{"deployment": {"deploy_id": "dep_a1b2c3d4","domain": "myapp.dev","status": "live","deploy_url": "https://myapp.dev","build\_log": "...","started_at": "2026-03-01T12:00:00Z","completed_at": "2026-03-01T12:02:30Z" } }
GET /api/deploys Auth Required ▾
List all your deployments across all domains.
curlCopy
curl https://hoist-g8do.polsia.app/api/deploys \-H "Authorization: Bearer hoist_your_api_key"
💰 TLD Pricing
Live pricing pulled from the API. All prices are annual.
Loading pricing...
⚡ Try It Live
Test domain search against the live API. No auth required.
🔍 Domain Search
📋 TLD List
GET /api/domains/tlds
💲 Pricing
GET /api/pricing
🤖 MCP Server
Connect Hoist to Claude Desktop, Cursor, or any MCP-compatible AI agent. Search domains, register, deploy, and manage DNS — all from your AI assistant.
Quick Install
npmCopy
npx @hoist/mcp-server
Claude Desktop
Add to ~/.claude/claude_desktop_config.json:
JSONCopy
{"mcpServers": {"hoist": {"command": "npx","args": ["@hoist/mcp-server"],"env": {"HOIST_API_KEY": "hoist_your_api_key_here" } } } }
Cursor
Add to .cursor/mcp.json in your project root:
JSONCopy
Or fetch the config directly:
curlCopy
curl https://hoist-g8do.polsia.app/mcp/config.json
No API key? The search_domain and get_pricing tools work without authentication. Register via register_domain with an email for guest checkout — no key needed.
🔧 MCP Tools Reference
Six tools available to AI agents. Each wraps a Hoist REST endpoint.
| Tool | Auth | Description |
|---|---|---|
| search_domain | No | Check availability for one domain or search across all TLDs |
| register_domain | Optional | Register a domain. Guest checkout with email, or auth with API key |
| check_status | Yes | Domain status, DNS records, deployments, payment info |
| get_pricing | No | TLD pricing list, filterable by specific TLD |
| deploy | Yes | Deploy a git repo to a registered domain |
| manage_dns | Yes | Add, delete, or list DNS records (A, AAAA, CNAME, MX, TXT, NS, SRV) |
Example: AI agent finds and registers a domain
Agent conversation
// Agent uses search_domain tool User: "Find me a cheap domain for my side project called neptune" Agent calls: search_domain({ query: "neptune" })// → Returns availability across .com, .io, .dev, .xyz, .site, etc. Agent calls: register_domain({ domain: "neptune.site", email: "[email protected]"})// → Returns Stripe checkout URL ($2.99/yr) Agent: "neptune.site is available for $2.99/yr. Here's your checkout link: ..."
Get the MCP server: npx @hoist/mcp-server — works with Claude, Cursor, and any MCP client.
📖 Full Workflow: Search → Register → Deploy
End-to-end example in Node.js — from finding a domain to deploying code on it.
Node.js — Full workflowCopy
const BASE = 'https://hoist-g8do.polsia.app/api';// 1. Sign up and get API key const auth = await fetch(`${BASE}/auth/signup`, {method: 'POST',headers: { 'Content-Type': 'application/json' },body: JSON.stringify({ email: '[email protected]', password: 'supersecure123' }) }).then(r => r.json());const headers = {'Content-Type': 'application/json','Authorization': `Bearer ${auth.api_key}`};// 2. Search for available domains const search = await fetch(`${BASE}/domains/search`, {method: 'POST', headers,body: JSON.stringify({ name: 'coolproject' }) }).then(r => r.json());const available = search.results.filter(r => r.available); console.log('Available:', available.map(r => `${r.domain} (${r.price_formatted})`));// 3. Register the cheapest available domain const pick = available.sort((a, b) => a.price_cents - b.price_cents)[0];const reg = await fetch(`${BASE}/domains/register`, {method: 'POST', headers,body: JSON.stringify({ domain: pick.domain }) }).then(r => r.json()); console.log('Pay here:', reg.payment.payment_url);// → User completes Stripe checkout // 4. Deploy after payment const deploy = await fetch(`${BASE}/deploy`, {method: 'POST', headers,body: JSON.stringify({domain: pick.domain,source_url: 'https://github.com/user/my-app' }) }).then(r => r.json());// 5. Poll until live let status = 'building';while (status === 'building') {await new Promise(r => setTimeout(r, 5000));const check = await fetch(`${BASE}/deploy/${deploy.deployment.deploy_id}`, { headers }) .then(r => r.json()); status = check.deployment.status; } console.log('Live at:', `https://${pick.domain}`);
Ready to build? Search → Register → Deploy, all from one API. Start with a domain.
Start building →
⚠️ Errors
All errors return JSON with an error field. Some include a hint.
| Status | Meaning | Example |
|---|---|---|
| 400 | Bad request / missing fields | {"error": "Email and password required"} |
| 401 | Missing or invalid API key | {"error": "Missing API key", "hint": "Set Authorization: Bearer "} |
| 404 | Resource not found | {"error": "Domain not found"} |
| 409 | Conflict (duplicate) | {"error": "Email already registered"} |
| 500 | Server error | {"error": "Internal server error"} |
❓ Frequently Asked Questions
Common questions about the Hoist API, domain registration, and AI agent integration.
What TLDs does Hoist support? ▾
Hoist supports 14 TLDs: .com, .io, .dev, .ai, .app, .xyz, .site, .org, .net, .co, .me, .sh, .tech, and .cloud. Prices range from $2.99/yr (.site) to $79.99/yr (.ai). Use GET /api/pricing for live pricing or GET /api/domains/tlds for a quick list.
How do AI agents register domains with Hoist? ▾
Two ways:
1. REST API — Your agent calls POST /api/domains/search to find available domains, then POST /api/domains/checkout with an email for guest checkout (no account needed). The API returns a Stripe payment URL.
2. MCP Server — Install with npx @hoist/mcp-server and add it to Claude Desktop or Cursor config. The agent gets six tools: search_domain, register_domain, check_status, get_pricing, deploy, and manage_dns. Domain search works without an API key.
Can I deploy code without creating an account? ▾
Yes. POST /api/deploy accepts a source_url with no authentication. You get a temporary URL (slug.hoist-g8do.polsia.app) that expires in 24 hours, plus a claim_token. Sign up later and call POST /api/deploy/claim with the token to make it permanent.
How does Hoist compare to GoDaddy or Namecheap API? ▾
Hoist is purpose-built for programmatic use. Key differences:
No minimums — GoDaddy requires a reseller agreement, Namecheap requires 20+ domains. Hoist has no requirements.
Modern API — REST/JSON, not XML. No IP whitelisting needed.
Guest checkout — Search and register domains without creating an account first.
Built-in deployment — Deploy code to your domain in the same API call.
MCP for AI agents — No other registrar offers an MCP server.
See the full comparison table above.
What is MCP and how does Hoist use it? ▾
MCP (Model Context Protocol) is an open standard by Anthropic that lets AI assistants interact with external tools and services. Hoist provides an MCP server that exposes domain registration, DNS management, and deployment as tools your AI can call directly.
Install: npx @hoist/mcp-server
Works with: Claude Desktop, Cursor, Windsurf, and any MCP-compatible client.
Config endpoint: GET /mcp/config.json
How much does domain registration cost? ▾
Prices are annual and include DNS management and deployment at no extra cost:
.site — $2.99/yr | .xyz — $9.99/yr | .com — $12.99/yr | .dev — $14.99/yr
.app — $14.99/yr | .io — $39.99/yr | .ai — $79.99/yr
Use GET /api/pricing for the full live list with Stripe payment links.
What DNS record types are supported? ▾
Hoist supports 7 DNS record types: A, AAAA, CNAME, MX, TXT, NS, and SRV. Manage records via POST /api/domains/:domain/dns (add) and DELETE /api/domains/:domain/dns/:id (remove). Each record supports custom TTL values and priority (for MX/SRV).
How does authentication work? ▾
Sign up via POST /api/auth/signup with email and password. You get back an API key prefixed with hoist_. Send it as a Bearer token: Authorization: Bearer hoist_your_key.
Many endpoints are public (domain search, pricing, checkout, anonymous deploy) — no key needed. Auth is only required for managing your domains, DNS, and claimed deployments.
Can I use Hoist with my own payment flow? ▾
Yes. GET /api/pricing returns Stripe payment links for each TLD. You can embed these links directly in your UI or checkout flow. Alternatively, use POST /api/domains/checkout which returns a Stripe checkout session URL that you can redirect users to. After payment, the domain activates automatically via Stripe webhooks.
Register and deploy in one command. Built for AI agents and developers.
Not ready yet? Get notified when we launch.
Join Waitlist
Related Servers
Kevros Governance
Cryptographic action verification and hash-chained audit trails for AI agents
Crypto MCP Server
Fetches real-time cryptocurrency prices from the CoinGecko API.
Salesforce Lite
A simple and lightweight server for connecting AI assistants to Salesforce data.
1Panel
An MCP server for 1Panel, a modern Linux server operation and maintenance panel.
Remote MCP Server (Authless)
A remote MCP server deployable on Cloudflare Workers without authentication. It can be deployed via Cloudflare or run locally using npm.
Ramp
Retrieve and analyze data or run tasks for Ramp using its Developer API.
WaveGuard
Physics-based anomaly detection via MCP — send any data, get anomalies back using wave-equation dynamics. No training pipelines, no model files.
GAM MCP Server
Administer Google Workspace using the GAM command-line tool.
Remote MCP Server (Authless)
A remote, auth-less MCP server deployable on Cloudflare Workers or locally via npm.
OpenRouter
Integrate with OpenRouter.ai's diverse ecosystem of AI models. Requires an OpenRouter API key.