Hoist
Domain registration, DNS management, and code deployment for AI agents. Register domains and deploy in one command.
Getting Started
Introduction Authentication Quickstart
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 /deployGET /deploy/:idGET /deploys
MCP Server
Setup Tools Reference
Tools
TLD Pricing Try It Live
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
🔑 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 <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 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" } }
👤 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 <key>"}
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 to your registered domains. Point to a GitHub repo and Hoist handles the rest.
POST /api/deploy Auth Required ▾
Create a new deployment. Provide a source URL (GitHub repo) and the target domain.
Request Body
| Field | Type | Required | Description |
|---|---|---|---|
| domain | string | required | Target domain (must be registered) |
| source_url | string | required | GitHub repo URL |
| source_type | string | optional | Default: "github" |
RequestCopy
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
{"deployment": {"deploy_id": "dep_a1b2c3d4","domain": "myapp.dev","status": "building","source_type": "github","source_url": "https://github.com/user/repo","started\_at": "2026-03-01T12:00:00Z" } }
GET /api/deploy/:deployId Auth Required ▾
Poll deployment status. Status transitions: building → 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: ..."
📖 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}`);
⚠️ 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 <key>"} |
| 404 | Resource not found | {"error": "Domain not found"} |
| 409 | Conflict (duplicate) | {"error": "Email already registered"} |
| 500 | Server error | {"error": "Internal server error"} |
Related Servers
Salesforce MCP Server
Provides AI agents with secure access to Salesforce data and operations.
Remote MCP Server on Cloudflare
A remote MCP server designed to run on Cloudflare Workers, featuring OAuth login support.
fal.ai Ideogram v3
Advanced text-to-image generation model with superior quality and text rendering via the fal.ai API.
Google Cloud Healthcare API (FHIR)
Provides healthcare tools for interacting with FHIR resources on Google Cloud Healthcare API and public medical research APIs like PubMed.
Ramp
Retrieve and analyze data or run tasks for Ramp using its Developer API.
MCP Weather Server
Provides hourly weather forecasts using the AccuWeather API.
Databox MCP
Talk to your data with Databox MCP by enabling agentic analytics, automated data ingestion, and real-time conversational analytics to get proactive recommendations and instant BI answers, not just charts.
Snowflake Cortex AI
A server for Snowflake providing tools for its Cortex AI features, including Search, Analyst, and Complete.
Uptime Agent
Connects your Uptime Agent monitoring system to AI assistants.
PrestaShop MCP Server
A server for managing PrestaShop e-commerce stores through a unified product API.