67hosting
Этот сайт доступен на русском Перейти →
← Home

How to host a static website

67hosting quick start: publish a static site (HTML/SPA) or deploy a container app (Node/Python/Go with a managed Postgres) — a live URL with automatic SSL in minutes. Static sites run no server code; apps run any stack.

1. Create a site

Two ways:

  • Upload your HTML. Drop your site files (index.html, CSS, JS, images) — they go live instantly on a free name.host67.com address.
  • Build with AI. Describe the site you want — AI generates and publishes it. Then edit it right in the chat: “change the prices”, “add a testimonials section”, “make the header dark”.
Create a site for free →

2. Connect your domain

To serve the site on your own domain (e.g. example.com), add an A record at your registrar pointing to the node IP shown in the panel after you add the domain:

Type: A
Name: @  (or www)
Value: IP from the 67hosting panel

DNS usually propagates within minutes (sometimes a few hours). Add the www subdomain with the same A record.

3. SSL is automatic

As soon as your domain points to the node, a free SSL certificate (Let’s Encrypt) is issued automatically — nothing to configure. The site is served over https:// right away and renews on its own.

4. Forms without a backend

Collect submissions from HTML forms on a static site with no server of your own: point the form to the /f/<token> address from your panel and submissions land in your dashboard. Handy for landing pages and contact forms.

5. Email on your domain

Add email to any of your domains (or the free name.host67.com address) in the site’s Email section. We show the DNS records to publish (MX, SPF, DKIM); add them at your registrar and hit “Verify”. Then pick a mode:

  • Forwarding — free, always. Mail to info@yourdomain is forwarded to your personal inbox (Gmail, etc.). Up to 3 forwarding addresses per domain. The destination is confirmed with a code, so nobody can forward mail to an address they don’t own.
  • Full mailbox with a web client. Stores mail, has its own address + password login, and a clean web interface at webmail.host67.com: read, send, attachments, folders, drafts, address book. You can hand the mailbox password to an employee without granting access to your account panel.

Mailboxes with a web client: the Free plan includes 1 mailbox on the free *.host67.com address with 1 GB of storage. Pro gives 3 mailboxes on *.host67.com plus 3 more on your own domain. Forwarding is free on any plan and doesn’t count toward this limit.

6. Single-page apps (SPA)

Frontends built with React, Vue, Angular or Svelte use client-side routing: paths like /app or /dashboard/42 don’t exist as files — JavaScript renders them in the browser. On a direct visit, reload or shared link, a plain static host returns 404.

Turn on the “Single-page app (SPA)” toggle in your site’s Settings — unknown paths are then served as index.html with a 200 status and your router shows the right screen. Existing files are served as-is, while missing assets (.js, .css, images) still return a real 404, so a broken bundle isn’t masked as a working page.

Upload the built static output (your framework’s dist/) — 67hosting doesn’t build projects; the API URL is baked in at build time. You can also enable this via the API/MCP with spa: true when creating a site.

7. API & MCP — publish from code and from AI agents

Everything you can do in the panel, you can do programmatically: create sites, publish files, deploy container apps with a managed Postgres, attach domains and send email — from CI/CD, a script, or straight from an AI agent. Two interfaces sit on top of the same logic: a REST API and an MCP server.

Access token

Go to Settings → API tokens and create a token. It is shown once — copy it right away. Pass it in the header:

Authorization: Bearer h67_your_token

A token acts as your account within your plan. Revoke a compromised token from the same tab.

REST API

Base URL — https://app.host67.com/api/v1. Responses are JSON.

  • GET    /api/v1/sites — list your sites
  • POST   /api/v1/sites — create a site
  • GET    /api/v1/sites/{id} — site details
  • POST   /api/v1/sites/{id}/publish — publish a ZIP
  • DELETE /api/v1/sites/{id} — delete a site
  • POST   /api/v1/shares — upload a file, get a temporary link
  • POST   /api/v1/email/send — send an email from your domain
  • POST   /api/v1/apps — deploy an app (container); body = a ZIP of the source
  • GET    /api/v1/apps · GET /api/v1/apps/{id} — list / inspect apps
  • GET    /api/v1/apps/{id}/logs — build + runtime logs (debug a failed deploy)
  • POST   /api/v1/apps/{id}/db/query — run SQL against the app's Postgres
  • POST   /api/v1/sites/{id}/domains — attach a domain to the project (to the site or an app)

Full agent-oriented reference (every parameter, the projects model, examples): host67.com/api.txt.

The typical flow is create, then upload an archive. Publishing replaces the entire site contents (a full snapshot, not an incremental upload); put index.html at the archive root:

# 1. Create a site (region ru/eu/us; slug is an optional free subdomain)
curl -X POST https://app.host67.com/api/v1/sites \
  -H "Authorization: Bearer h67_your_token" \
  -H "Content-Type: application/json" \
  -d '{"name":"Landing","region":"ru","slug":"my-site"}'
# → {"id":42,"url":"https://my-site.host67.com","published":false, ...}

# 2. Publish the site's ZIP archive
curl -X POST https://app.host67.com/api/v1/sites/42/publish \
  -H "Authorization: Bearer h67_your_token" \
  -H "Content-Type: application/zip" \
  --data-binary @site.zip
# → {"id":42,"url":"https://my-site.host67.com","published":true,"disk_bytes":10240}

Limits: up to 200 MB per publish, up to 500 MB per site. Number of sites depends on your plan.

Deploy an application (container)

Beyond static sites, you can deploy a real backend as a container. Send a ZIP of your project — if it has a Dockerfile we use it, otherwise Nixpacks auto-detects the stack (Node/Next.js, Python, Go, Ruby, …). Your app must listen on the port in the PORT env var. It gets a live <slug>.host67.com URL with automatic HTTPS. Add db=1 for a managed Postgres (a DATABASE_URL is injected into the container). Free apps sleep when idle and wake on the next request (~1s cold start).

# Deploy an app with a managed Postgres. Returns immediately with status "building".
curl -X POST "https://app.host67.com/api/v1/apps?slug=myapp®ion=eu&db=1" \
  -H "Authorization: Bearer h67_your_token" \
  -H "Content-Type: application/zip" \
  --data-binary @app.zip
# → {"id":7,"slug":"myapp","url":"https://myapp.host67.com","status":"building","project":51}

# Poll until running, then debug with logs / SQL if needed:
curl "https://app.host67.com/api/v1/apps/7"        -H "Authorization: Bearer h67_your_token"
curl "https://app.host67.com/api/v1/apps/7/logs"   -H "Authorization: Bearer h67_your_token"
curl -X POST "https://app.host67.com/api/v1/apps/7/db/query" \
  -H "Authorization: Bearer h67_your_token" -H "Content-Type: application/json" \
  -d '{"sql":"SELECT count(*) FROM users"}'

An app belongs to a project (a site): omit project and one is created automatically, or pass project=<id> to add it to an existing one. A custom domain can point to the project's site or to an app — see api.txt. Free apps are capped by plan (3 on Free, 10 on Pro; paid always-on apps don’t count); always-on apps are billed per container from your balance.

Deploy with git push (Heroku-style)

You can deploy an existing app straight from a local git repo — no GitHub needed. The app must already exist (created via deploy_app or in the panel); git push deploys into it, keeping its plan, domain, database and env vars. The build is the same as deploy_app (Dockerfile or Nixpacks), with progress streamed to your terminal as remote: lines.

# Username is anything, password is your API token (put it in the URL to skip the prompt):
git remote add host67 https://x:h67_your_token@app.host67.com/git/myapp.git
git push host67 main
# remote: -----> Building…
# remote: -----> Deployed ✓
# remote:        https://myapp.host67.com

Auth is HTTP basic over HTTPS: any username, and the same h67_… token from your profile as the password. Pushing a slug you don't own is rejected.

MCP server (for AI agents)

If you have an AI agent (Claude, Cursor and other MCP clients), connect it to 67hosting by URL — nothing to install locally. The agent creates and publishes sites itself. The endpoint is https://app.host67.com/mcp, authenticated with the same token:

{
  "mcpServers": {
    "host67": {
      "type": "http",
      "url": "https://app.host67.com/mcp",
      "headers": { "Authorization": "Bearer h67_your_token" }
    }
  }
}

Available tools: list_sites, get_site, create_site, add_domain, publish_site, delete_site, share_file, send_email, deploy_app, app_logs, app_db_query. Just tell the agent “deploy this app to 67hosting” or “publish this site” and it calls them for you.

Temporary file links

Need to hand a build or artifact to someone or another machine? Upload the file and get a public link with a limited lifetime. The file is stored privately and served only through dl.host67.com; once it expires the link stops working. Size up to 500 MB (Free) / 4 GB (Pro), ttl from 10 minutes to 24 hours (default 1 hour).

# Upload a file (request body is the raw file bytes)
curl -X POST "https://app.host67.com/api/v1/shares?ttl=3600&name=app-setup.exe" \
  -H "Authorization: Bearer h67_your_token" \
  --data-binary @app-setup.exe
# → {"url":"https://dl.host67.com/<token>/app-setup.exe","expires_at":"...","size_bytes":...}

For an AI agent it’s even simpler — the share_file tool: say “share this file” and it uploads and returns the link.

Send email from your domain

Transactional email over the API — like Resend/Postmark, but from your own domain. Connect a domain under Email, add the DNS records (MX/SPF/DKIM), and once verified you can send from any address on it — the from is checked to belong to you; other domains are rejected. Limit: 30 emails/day (Free) / 500 (Pro).

curl -X POST https://app.host67.com/api/v1/email/send \
  -H "Authorization: Bearer h67_your_token" \
  -H "Content-Type: application/json" \
  -d '{
    "from": "Acme <hello@yourdomain.com>",
    "to": ["client@example.com"],
    "subject": "Order #1234 confirmed",
    "html": "<p>Thanks for your order!</p>"
  }'
# → {"id":"<message-id>"}

to/cc/bcc accept a string or an array; you can add attachments (filename + base64 content) and reply_to. DKIM/SPF are applied automatically so mail passes provider checks.

8. Plans and limits

The Free plan is free forever: sites on a free address, custom domains, the AI builder, forms, free email forwarding and 1 mailbox with a web client (1 GB). Pro (from 100 ₽/mo) adds more sites and domains, removes the badge, and gives up to 3 + 3 mailboxes. See the pricing page for details.

Need help?

Message support from your dashboard or email support@opsoftinc.com.