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.

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
curl -X POST https://hoist-g8do.polsia.app/api/auth/signup \ -H "Content-Type: application/json" \ -d '{"email": "dev@example.com", "password": "secure_password_123"}'
Response
{ "user": { "id": 1, "email": "dev@example.com" }, "api_key": "hoist_a1b2c3d4e5f6...", "hint": "Use this key in Authorization: Bearer <key>" }
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
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
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 workflow
// 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: 'agent@mycompany.com' }) }).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)
# 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 records
# 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
FieldTypeRequiredDescription
email string required Account email address
password string required Minimum 8 characters
Request
curl -X POST https://hoist-g8do.polsia.app/api/auth/signup \ -H "Content-Type: application/json" \ -d '{"email": "dev@example.com", "password": "secure_pass_123"}'
Node.js
const res = await fetch('https://hoist-g8do.polsia.app/api/auth/signup', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ email: 'dev@example.com', password: 'secure_pass_123' }) }); const { api_key } = await res.json();
Python
import requests res = requests.post('https://hoist-g8do.polsia.app/api/auth/signup', json={ 'email': 'dev@example.com', 'password': 'secure_pass_123' }) api_key = res.json()['api_key']
Response — 201
{ "user": { "id": 1, "email": "dev@example.com" }, "api_key": "hoist_a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6", "hint": "Use this key in Authorization: Bearer <key>" }
POST /api/auth/login Public

Login with existing credentials. Returns a new API key on every login.

Request Body
FieldTypeRequiredDescription
emailstringrequiredAccount email
passwordstringrequiredAccount password
Request
curl -X POST https://hoist-g8do.polsia.app/api/auth/signup \ -H "Content-Type: application/json" \ -d '{"email": "dev@example.com", "password": "secure_pass_123"}'
Node.js
const res = await fetch('https://hoist-g8do.polsia.app/api/auth/login', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ email: 'dev@example.com', password: 'secure_pass_123' }) }); const { api_key } = await res.json();
Python
import requests res = requests.post('https://hoist-g8do.polsia.app/api/auth/login', json={ 'email': 'dev@example.com', 'password': 'secure_pass_123' }) api_key = res.json()['api_key']
Response — 200
{ "user": { "id": 1, "email": "dev@example.com" }, "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.

curl
curl https://hoist-g8do.polsia.app/api/auth/whoami \ -H "Authorization: Bearer hoist_your_api_key"
Response — 200
{ "user": { "id": 1, "email": "dev@example.com" }, "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
FieldTypeRequiredDescription
domainstringoption AFull domain with TLD (e.g. "myapp.dev")
namestringoption BName only — searches all TLDs (e.g. "myapp")
Single TLD
curl -X POST https://hoist-g8do.polsia.app/api/domains/search \ -H "Content-Type: application/json" \ -d '{"domain": "myproject.dev"}'
Node.js — Multi-TLD
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-TLD
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
FieldTypeRequiredDescription
domainstringrequiredDomain to register (e.g. "myapp.dev")
emailstringrequiredEmail for account creation
curl
curl -X POST https://hoist-g8do.polsia.app/api/domains/checkout \ -H "Content-Type: application/json" \ -d '{"domain": "myapp.dev", "email": "user@example.com"}'
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.

curl
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
FieldTypeRequiredDescription
domainstringrequiredDomain to register (e.g. "myapp.dev")
curl
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.

curl
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.

curl
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
FieldTypeRequiredDescription
typestringrequiredA, AAAA, CNAME, MX, TXT, NS, SRV
namestringrequiredRecord name (@ for root, or subdomain)
valuestringrequiredRecord value (IP, hostname, etc.)
ttlnumberoptionalTTL in seconds (default: 3600)
prioritynumberoptionalPriority for MX/SRV records
curl
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.

curl
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.

curl
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
FieldTypeRequiredDescription
domainstringrequiredDomain to confirm
session_idstringoptionalStripe checkout session ID
curl
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.

curl
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
FieldTypeRequiredDescription
source_urlstringrequiredGitHub repo URL or local path
domainstringoptionalTarget domain (required if authenticated, ignored for anonymous)
source_typestringoptionalDefault: "git"
Anonymous Deploy (no auth needed)
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.js
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);
Python
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
FieldTypeRequiredDescription
claim_tokenstringone ofClaim token from the anonymous deploy response
slugstringone ofSlug of the anonymous deploy (e.g., "abc123")
curl
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: queuedbuildingdeployinglive or failed.

curl
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.

curl
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

💲 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

npm
npx @hoist/mcp-server

Claude Desktop

Add to ~/.claude/claude_desktop_config.json:

JSON
{ "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:

JSON
{ "mcpServers": { "hoist": { "command": "npx", "args": ["@hoist/mcp-server"], "env": { "HOIST_API_KEY": "hoist_your_api_key_here" } } } }

Or fetch the config directly:

curl
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.

ToolAuthDescription
search_domainNoCheck availability for one domain or search across all TLDs
register_domainOptionalRegister a domain. Guest checkout with email, or auth with API key
check_statusYesDomain status, DNS records, deployments, payment info
get_pricingNoTLD pricing list, filterable by specific TLD
deployYesDeploy a git repo to a registered domain
manage_dnsYesAdd, 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: "user@email.com" }) // → 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.

Search a domain →

📖 Full Workflow: Search → Register → Deploy

End-to-end example in Node.js — from finding a domain to deploying code on it.

Node.js — Full workflow
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: 'me@dev.com', 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.

StatusMeaningExample
400Bad request / missing fields{"error": "Email and password required"}
401Missing or invalid API key{"error": "Missing API key", "hint": "Set Authorization: Bearer <key>"}
404Resource not found{"error": "Domain not found"}
409Conflict (duplicate){"error": "Email already registered"}
500Server 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.