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 /deployPOST /deploy/claimGET /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 "}
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 "}
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: ..."
📖 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 "} |
| 404 | Resource not found | {"error": "Domain not found"} |
| 409 | Conflict (duplicate) | {"error": "Email already registered"} |
| 500 | Server error | {"error": "Internal server error"} |
Servidores relacionados
Proxmox MCP Server
A server for managing Proxmox VE environments directly from your project directory.
Hygraph
Integrate Hygraph directly into MCP-compatible tools like Claude and Cursor, executing content operations via natural language
Weather MCP Server
Provides weather information using the OpenWeatherMap API.
Cloudflare MCP Server Template
A template for deploying a remote, authentication-free MCP server on Cloudflare Workers. Tools are defined directly in the source code.
IOL MCP Tool
Interact with the Invertir Online (IOL) API to manage investments and access market data.
Remote MCP Server (Authless)
A remote MCP server deployable on Cloudflare Workers without authentication.
Bitrefill
Access Bitrefill services to purchase gift cards, mobile top-ups, and more.
SharePoint MCP Server
Integrates with Microsoft SharePoint, allowing interaction with documents, folders, and other SharePoint resources.
Amazon VPC Lattice
Access and manage AWS VPC Lattice resources and related documentation.
fal-ai/hidream-i1-full
Generate high-quality images using the fal-ai/hidream-i1-full model via the fal.ai API.