ezyhostDeploy, manage, and monitor static websites via the EzyHost API. Upload files, build with AI, track analytics, manage custom domains, QR codes, email capture...
Install via ClawdBot CLI:
clawdbot install AraratDev/ezyhostThis document describes how AI agents can interact with EzyHost programmatically.
For human users, visit ezyhost.io.
https://ezyhost.io/api
All API requests require an API key passed as a header:
x-api-key: YOUR_API_KEY
Generate your API key at https://ezyhost.io/dashboard/api-keys.
Note: API access requires the Solo plan or higher.
GET /api/projects
Returns { projects: [{ id, name, slug, subdomain, customDomain, status, storageUsed, seoScore, deployedAt, _count: { files, analytics } }] }
POST /api/projects
Content-Type: application/json
Body: { "name": "my-site", "subdomain": "my-site" }
Returns { project: { id, name, subdomain, s3Prefix, url, ... } }
The subdomain must be 3+ characters, lowercase alphanumeric with hyphens. Your site will be live at https://{subdomain}.ezyhost.site.
GET /api/projects/:id
Returns { project: { id, name, subdomain, customDomain, status, storageUsed, seoScore, files: [...], ... } }
PATCH /api/projects/:id
Content-Type: application/json
Body: { "name": "new-name", "metaTitle": "...", "metaDescription": "..." }
DELETE /api/projects/:id
Deletes the project and all associated files from storage. This cannot be undone.
POST /api/upload/:projectId
Content-Type: multipart/form-data
Body: files (multipart)
Returns { message, filesUploaded, totalSize, project: { id, subdomain } }
Supports .zip archives (auto-extracted) and individual files. All uploaded files go through malware scanning (ClamAV + magic byte validation).
Supported file types: HTML, CSS, JS, JSON, XML, SVG, images (PNG, JPG, GIF, WebP, AVIF, ICO), PDFs, presentations (PPTX), documents (DOCX, XLSX), audio (MP3, WAV, OGG, FLAC, AAC), video (MP4, WebM, MOV), fonts (WOFF, WOFF2, TTF, OTF, EOT), archives (ZIP), 3D models (GLB, GLTF, OBJ), and any other static asset.
Blocked file types: Executables (.exe, .dll, .bat, .sh, .php, .asp, .jar) are rejected.
POST /api/upload/:projectId/presign
Content-Type: application/json
Body: { "filename": "video.mp4", "contentType": "video/mp4" }
Returns { uploadUrl, s3Key } โ use for large file direct-to-S3 uploads.
DELETE /api/upload/:projectId/files/:fileId
POST /api/upload/:projectId/files/bulk-delete
Content-Type: application/json
Body: { "fileIds": ["id1", "id2", "id3"] }
PATCH /api/upload/:projectId/files/:fileId
Content-Type: application/json
Body: { "newPath": "assets/renamed-file.png" }
GET /api/seo/:projectId
Returns { score, suggestions: [{ id, type, severity, message, resolved }] }
POST /api/seo/:projectId/analyze
Triggers a fresh SEO scan and returns updated suggestions.
PATCH /api/seo/suggestion/:id/resolve
POST /api/seo/:projectId/ai-fix
Content-Type: application/json
Body: { "suggestionIds": ["id1", "id2"] }
Uses AI to automatically fix SEO issues in your HTML files. Counts against AI generation limits.
GET /api/analytics/:projectId?period=7d
Periods: 24h, 7d, 30d, 90d
Returns { totalVisits, visitsByDay: [{ date, visits }], topPages: [{ path, visits }], topReferrers: [{ referrer, visits }], topCountries: [{ country, visits }] }
POST /api/analytics/track
Content-Type: application/json
Body: { "projectId": "...", "path": "/page", "referrer": "...", "userAgent": "..." }
POST /api/domains/:projectId
Content-Type: application/json
Body: { "domain": "example.com" }
Returns { dnsInstructions: { type, name, value } } โ DNS records you need to create.
Requires Solo plan or higher.
GET /api/domains/:projectId/verify
Returns { verified: true/false, dnsInstructions }. Call this after setting up DNS records.
DELETE /api/domains/:projectId
POST /api/aibuilder/chat
Content-Type: application/json
Body: { "message": "build a portfolio site", "history": [], "currentFiles": [] }
Returns SSE stream with events:
status โ progress updates ("Generating HTML...")progress โ percentage (0-100)done โ { files: [{ filename, content }] } โ the generated fileserror โ { message } on failureCounts against per-plan AI generation limits.
POST /api/aibuilder/deploy/:projectId
Content-Type: application/json
Body: { "files": [{ "filename": "index.html", "content": "<!DOCTYPE html>..." }] }
POST /api/aibuilder/download-zip
Content-Type: application/json
Body: { "files": [{ "filename": "index.html", "content": "..." }] }
Returns a ZIP file download.
GET /api/aibuilder/templates โ list saved templates
GET /api/aibuilder/templates/:id โ get template details
POST /api/aibuilder/templates โ save new template
PATCH /api/aibuilder/templates/:id โ update template
DELETE /api/aibuilder/templates/:id โ delete template
Template body: { "name": "My Template", "description": "...", "messages": [...], "files": [...] }
GET /api/apikey
Returns { hasKey: true/false, apiKey: "ezy_****..." } โ key is partially masked.
POST /api/apikey/generate
Returns { apiKey: "ezy_..." } โ full key shown only once. Revokes any previous key.
DELETE /api/apikey
GET /api/billing
Returns { plan, subscription, aiCredits, usage }.
GET /api/billing/ai-usage
Returns { used, limit, remaining, resetsAt }.
| Feature | Free | Tiny ($5) | Solo ($13) | Pro ($31) | Pro Max ($74) |
|---------|------|-----------|------------|-----------|---------------|
| Projects | 1 | 1 | 5 | 15 | Unlimited |
| Storage | 10 MB | 25 MB | 75 MB/project | 10 GB | 2 TB |
| Visits/mo | 1K | 10K | 100K | 500K | Unlimited |
| File types | Basic | All | All | All | All |
| Custom domains | โ | โ | Yes | Yes | Yes |
| API access | โ | โ | Yes | Yes | Yes |
| AI generations | 3/mo | 15/mo | 50/mo | 150/mo | 500/mo |
| Remove branding | โ | Yes | Yes | Yes | Yes |
Sites are served at:
https://{subdomain}.ezyhost.sitehttps://{your-domain.com} (Solo+ plans)All sites include HTTPS, CDN caching, and automatic file browser for non-HTML projects.
All errors return JSON:
{ "error": "Description of the error" }
Plan limit errors include "upgrade": true to indicate a higher plan is needed.
Common HTTP status codes:
400 โ Bad request / validation error401 โ Not authenticated403 โ Plan limit reached404 โ Resource not found429 โ Rate limited500 โ Server error# 1. Create a project
curl -X POST https://ezyhost.io/api/projects \
-H "x-api-key: YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{"name": "my-site", "subdomain": "my-site"}'
# 2. Upload files (ZIP)
curl -X POST https://ezyhost.io/api/upload/PROJECT_ID \
-H "x-api-key: YOUR_KEY" \
-F "files=@site.zip"
# 3. Check SEO
curl https://ezyhost.io/api/seo/PROJECT_ID \
-H "x-api-key: YOUR_KEY"
# 4. Add custom domain (optional, Solo+)
curl -X POST https://ezyhost.io/api/domains/PROJECT_ID \
-H "x-api-key: YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{"domain": "example.com"}'
Your site is now live at https://my-site.ezyhost.site
# 1. Generate a site with AI (SSE stream)
curl -N -X POST https://ezyhost.io/api/aibuilder/chat \
-H "x-api-key: YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{"message": "build a modern portfolio with dark theme", "history": []}'
# 2. Deploy the generated files to a project
curl -X POST https://ezyhost.io/api/aibuilder/deploy/PROJECT_ID \
-H "x-api-key: YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{"files": [{"filename": "index.html", "content": "..."}]}'AI Usage Analysis
Analysis is being generatedโฆ refresh in a few seconds.
Extract text from PDFs with OCR support. Perfect for digitizing documents, processing invoices, or analyzing content. Zero dependencies required.
Fast local PDF parsing with PyMuPDF (fitz) for Markdown/JSON outputs and optional images/tables. Use when speed matters more than robustness, or as a fallback while heavier parsers are unavailable. Default to single-PDF parsing with per-document output folders.
Find, evaluate, and recommend ClawHub skills by need with quality filtering and preference learning.
Fetch full tweets, long tweets, quoted tweets, and X Articles from X/Twitter without login or API keys, using no dependencies and zero configuration.
Skill ๆฅๆพๅจ | Skill Finder. ๅธฎๅฉๅ็ฐๅๅฎ่ฃ ClawHub Skills | Discover and install ClawHub Skills. ๅ็ญ'ๆไปไนๆ่ฝๅฏไปฅX'ใ'ๆพไธไธชๆ่ฝ' | Answers 'what skill can X', 'find a skill'. ่งฆๅ...
Generate QR codes from text or URL for mobile scanning.