Website hosting with an API your agents can use
A REST API and a spec-compliant MCP server over the same surface. Deploy a site, read its live files back, patch a single line, and attach a form backend, booking widget, JSON content or a chatbot — from code, CI or any AI assistant.
https://api.dplooy.com/api/v1https://api.dplooy.com/mcpcurl -X POST https://api.dplooy.com/api/v1/deploy \ -H "Authorization: Bearer dpk_live_..." \ -d '{"html":"<h1>Hello</h1>","name":"demo"}'
demo.dplooy.comDeploy in 3 Steps
From zero to live website in under a minute.
Get Your API Key
Go to Settings → API Keys and create a new key. Copy the key — it's shown only once.
dpk_live_aBcDeFgHiJkLmNoPqRsTuVwXDeploy Your Site
Send your HTML to the deploy endpoint. Optionally include CSS and JS as separate strings.
curl -X POST https://api.dplooy.com/api/v1/deploy \
-H "Authorization: Bearer dpk_live_..." \
-H "Content-Type: application/json" \
-d '{"html":"<h1>Hello</h1>","name":"demo"}'It's Live!
The API responds with your live URL. That's it — your site is deployed with SSL.
{
"success": true,
"url": "https://my-site.dplooy.com",
"projectId": "a1b2c3d4-...",
"isRedeploy": false,
"plan": "pro",
"expiresAt": null
}Authentication
All API requests require a valid API key sent as a Bearer token in the Authorization header.
Authorization: Bearer dpk_live_your_key_hereGetting a Key
- Sign in to Dplooy and go to Settings
- Open the API Keys tab
- Click Create API Key, give it a name, and copy the key
Hashed Storage
Keys are SHA-256 hashed, never stored in plain text
Rate Limited
30 requests per minute per IP address
Revocable
Revoke any key instantly from the dashboard
API Reference
Six endpoints to deploy, manage, and inspect your hosted projects.
/deployDeploy an HTML website from code strings. Optionally include separate CSS and JS — they'll be auto-injected into the HTML as linked files.
Request Body (JSON)
| Parameter | Type | Status | Description |
|---|---|---|---|
html | string | Required | HTML content for the page |
css | string | Optional | CSS styles — saved as style.css and linked in <head> |
js | string | Optional | JavaScript — saved as script.js and linked before </body> |
name | string | Optional | Project name for the URL (e.g. 'my-site' → my-site.dplooy.com) |
Response — 201 Created
{
"success": true,
"url": "https://my-site.dplooy.com",
"projectId": "a1b2c3d4-e5f6-...",
"isRedeploy": false,
"plan": "pro",
"expiresAt": null
}Example
curl -X POST https://api.dplooy.com/api/v1/deploy \
-H "Authorization: Bearer dpk_live_your_key_here" \
-H "Content-Type: application/json" \
-d '{
"html": "<!DOCTYPE html><html><head><title>My Site</title></head><body><h1>Hello World</h1></body></html>",
"css": "h1 { color: teal; font-family: sans-serif; }",
"name": "my-site"
}'/deploy/zipDeploy a complete website from a ZIP archive. The ZIP must contain an index.html at the root. Subdirectories, CSS, JS, images, and fonts are all preserved.
Request Body (multipart/form-data)
| Parameter | Type | Status | Description |
|---|---|---|---|
file | file | Required | ZIP file containing the website (max 500 MB) |
name | string | Optional | Display name for the project |
projectName | string | Optional | URL slug (e.g. 'my-site' → my-site.dplooy.com) |
Response — 201 Created
{
"success": true,
"url": "https://my-site.dplooy.com",
"projectId": "a1b2c3d4-e5f6-...",
"isRedeploy": false,
"plan": "pro",
"expiresAt": null,
"fileCount": 12,
"warnings": []
}Example
curl -X POST https://api.dplooy.com/api/v1/deploy/zip \
-H "Authorization: Bearer dpk_live_your_key_here" \
-F "file=@website.zip" \
-F "name=my-website" \
-F "projectName=my-website"Code Examples
Copy-paste examples to get started in your language of choice.
Deploy HTML + CSS
curl -X POST https://api.dplooy.com/api/v1/deploy \
-H "Authorization: Bearer dpk_live_your_key_here" \
-H "Content-Type: application/json" \
-d '{
"html": "<!DOCTYPE html><html><head><title>My Site</title></head><body><h1>Hello World</h1></body></html>",
"css": "h1 { color: teal; font-family: sans-serif; }",
"name": "my-site"
}'Deploy ZIP
curl -X POST https://api.dplooy.com/api/v1/deploy/zip \
-H "Authorization: Bearer dpk_live_your_key_here" \
-F "file=@website.zip" \
-F "name=my-website" \
-F "projectName=my-website"List Projects
curl https://api.dplooy.com/api/v1/projects \
-H "Authorization: Bearer dpk_live_your_key_here"GitHub Actions
Auto-deploy on every push. Same project URL, updated content, analytics preserved. Most repos need no manual setup at all.
Webhook auto-deploy
Static repos — no build step
Connect the repo, then turn on Deploy on every push in the project's GitHub dialog → Deploys tab. Dplooy installs a signed webhook; every push pulls the repo and redeploys.
- No workflow file in your repo
- No API key anywhere
- Nothing to maintain
Actions build pipeline
React, Next.js, Vite, Astro
Set up build & deploy in the GitHub Deploy dialog. Dplooy detects the framework from your package.json and fills in the build command and output folder — confirm them and it does the rest.
- Creates a dedicated API key for the repo
- Installs it as an encrypted repo secret
- Commits the workflow file
workflow scope? Reconnect GitHub when prompted. You can also trigger a rebuild any time with Rebuild & deploy on the project's Deploys tab, and watch the run status live.Custom workflow (optional)
Only needed if you want to write your own pipeline instead of using the one-click setup above — for a monorepo, a custom build, or deploying from a non-GitHub CI.
Manual setup
- Go to your GitHub repo → Settings → Secrets and variables → Actions
- Click New repository secret
- Name:
DPLOOY_API_KEY - Value: paste your
dpk_live_...key - Add the workflow file below to your repo
For repos that are already plain HTML/CSS/JS — no build step needed.
# .github/workflows/deploy.yml
name: Deploy to Dplooy
on:
push:
branches: [main]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Deploy to Dplooy
run: |
zip -r site.zip . -x ".git/*" ".github/*" "node_modules/*" "README.md"
curl -X POST https://api.dplooy.com/api/v1/deploy/zip \
-H "Authorization: Bearer ${{ secrets.DPLOOY_API_KEY }}" \
-F "name=${{ github.event.repository.name }}" \
-F "file=@site.zip""isRedeploy": true so your CI pipeline knows it was an update.MCP Server
Build and deploy complete websites from claude.ai, ChatGPT, Claude Code, Cursor, Windsurf and any client that speaks Model Context Protocol. Two ways to connect — remote over OAuth with nothing to install, or the local npm package. Both expose the same tool set.
Remote — OAuth, no install
The only option for claude.ai and ChatGPT on the web
Add one custom connector URL. The client discovers everything else itself and runs the OAuth flow — no API key is created, copied or stored.
https://api.dplooy.com/mcpStandards implemented
Stateless Streamable HTTP, OAuth 2.1 + PKCE (S256 required), RFC 9728 protected-resource metadata, RFC 8414 server metadata, RFC 8707 resource indicators, RFC 9207 issuer identification, Client ID Metadata Documents with RFC 7591 DCR fallback.
Good to know
Custom connectors on claude.ai need a paid Claude plan; Team and Enterprise workspaces may be admin-gated. In ChatGPT they live in developer mode. Clients cache the tool list at connect time — refresh the connector to pick up newly added tools.
Manage or revoke connected apps in Settings → Connections. Revoking takes effect on the connection's next request.
Local install (stdio)
The MCP server is published on npm as @dplooy/mcp-server. It runs locally on your machine and talks to the Dplooy API using your key.
Run this single command in your terminal:
claude mcp add -t stdio \
-e DPLOOY_API_KEY=dpk_live_your_key_here \
dplooy -- npx -y @dplooy/mcp-serverRestart Claude Code after adding. The dplooy tools will appear automatically.
Available Tools
| Tool | Description |
|---|---|
deploy_website | Deploy HTML/CSS/JS to a live URL |
deploy_files | Deploy a multi-page site by passing each file inline (remote only) |
deploy_folder | Deploy a local folder, zipped automatically (local only) |
list_projects | List all your deployed projects |
get_project | Get details about a specific project |
get_project_files | Read a deployed site's live source files |
update_project_files | Patch a live site — targeted string edits, explicit deletes |
delete_project | Delete a project permanently |
get_account | Plan, usage, limits and the per-feature availability matrix |
get_guide | Canonical rules for any feature, read by the AI itself |
create_form | Create a form endpoint and get the HTML snippet |
list_forms | List form endpoints and their usage |
create_data_collection | Create a content collection from 20 presets |
get_data_collection | Fields, rows, public URL and fetch snippet |
list_data_collections | List collections and their assignments |
update_data_rows | Row-level edits, appends and deletes, or a full replace |
create_booking_page | Create a booking calendar and get the widget embed |
list_booking_pages | List booking widgets and pending requests |
upload_media | Add up to 16 images per call, ingested by URL |
list_media | List images in the media library |
assign_to_project | Bind forms, collections and bookings to a project |
configure_chatbot | Enable and configure the server-injected AI chatbot |
Example Usage
Once installed, just chat with your AI assistant naturally:
URL: https://my-portfolio.dplooy.com
Rate Limits & Plans
API limits are based on your plan. Upgrade anytime for higher limits.
| Limit | Free | Plus$4.99/mo | Pro$12.99/mo |
|---|---|---|---|
| Projects | 3 | 25 | Unlimited |
| Max File Size | 5 MB | 50 MB | 100 MB |
| Total Storage | 50 MB | 500 MB | 5 GB |
| Project Expiry | 3 days | Never | Never |
| Rate Limit | 30 req/min | 30 req/min | 30 req/min |
| API Access | ✓ | ✓ | ✓ |
429 Too Many Requests. Wait 60 seconds and retry.Error Handling
All errors return JSON with an error message and a machine-readable code.
{
"error": "Invalid or revoked API key",
"code": "INVALID_API_KEY"
}| Status | Code | Description |
|---|---|---|
| 400 | VALIDATION_FAILED | Missing or invalid request parameters |
| 400 | PROJECT_LIMIT_REACHED | You've hit your plan's project limit |
| 400 | FILE_TOO_LARGE | Content exceeds your plan's file size limit |
| 400 | SECURITY_THREAT_DETECTED | Malicious content detected in HTML |
| 400 | NO_INDEX_HTML | ZIP file must contain an index.html at root |
| 400 | INVALID_FILE_TYPE | Only ZIP files are accepted for /deploy/zip |
| 401 | INVALID_API_KEY | Missing, invalid, or revoked API key |
| 404 | NOT_FOUND | Project does not exist or isn't yours |
| 429 | RATE_LIMITED | Too many requests — wait 60 seconds |
| 500 | DEPLOY_FAILED | Internal error during deployment |