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.

FeatureHoistGoDaddy APINamecheap APICloudflare Registrar
API formatREST / JSONREST / JSONXML-basedREST / JSON
Account required to searchNoYesYesYes
Minimum domain requirementNoneReseller agreement20+ domainsNone
Guest checkout (no account)YesNoNoNo
Built-in code deploymentYesNoNoVia Pages (separate)
MCP server for AI agentsYes (6 tools)NoNoNo
Anonymous deploysYes (24hr temp URL)N/AN/ANo
DNS management via APIYes (7 record types)YesLimitedYes
Pricing starts at$2.99/yr (.site)$11.99/yr (.com)$8.88/yr (.com)At cost
Setup complexity1 API callApplication + approvalIP whitelistingAccount + nameserver transfer
Built for AI agentsYes (core design)NoNoNo

👤 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
emailstringrequiredAccount email address
passwordstringrequiredMinimum 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

FieldTypeRequiredDescription
emailstringrequiredAccount email
passwordstringrequiredAccount 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

FieldTypeRequiredDescription
domainstringoption AFull domain with TLD (e.g. "myapp.dev")
namestringoption BName 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

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

FieldTypeRequiredDescription
domainstringrequiredDomain 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

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

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

FieldTypeRequiredDescription
domainstringrequiredDomain to confirm
session_idstringoptionalStripe 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

FieldTypeRequiredDescription
source_urlstringrequiredGitHub repo URL or local path
domainstringoptionalTarget domain (required if authenticated, ignored for anonymous)
source_typestringoptionalDefault: "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

FieldTypeRequiredDescription
claim_tokenstringone ofClaim token from the anonymous deploy response
slugstringone ofSlug 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: queuedbuildingdeployinglive 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.

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: "[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.

StatusMeaningExample
400Bad request / missing fields{"error": "Email and password required"}
401Missing or invalid API key{"error": "Missing API key", "hint": "Set Authorization: Bearer "}
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.

Register and deploy in one command. Built for AI agents and developers.

Not ready yet? Get notified when we launch.

Join Waitlist

Related Servers

NotebookLM Web Importer

Import web pages and YouTube videos to NotebookLM with one click. Trusted by 200,000+ users.

Install Chrome Extension