Documentation

Deploy a site
Browse documentation

API reference

Deploy and manage sites from scripts, CI pipelines and your own tools. The API works on every plan, and your plan's limits apply to it exactly as they do in the dashboard.

Base URL

Every endpoint below is relative to
https://api.dplooy.com/api/v1

Create an API key

  1. 1In your dashboard, open Settings and the API Keys tab.
  2. 2Create a key and give it a name you will recognise, such as the tool that uses it.
  3. 3Copy the key — it starts with dpk_live_ and is shown only once. Dplooy stores a hash of it, never the key itself.

An account can have up to 5 keys at a time, on any plan.

Authentication

Send the key as a Bearer token with every request:

HTTP header
Authorization: Bearer dpk_live_your_key_here

Keep keys out of your site's code and your repository. In GitHub Actions, store the key as an encrypted secret.

Endpoints

Sites

POST /deployDeploy a site from HTML, with optional CSS and JavaScript. The same name updates the same site
POST /deploy/zipDeploy a site from a ZIP archive
GET /projectsList your sites — page, limit (up to 100) and status
GET /projects/:idOne site, with the forms, data, bookings and chatbot attached to it
GET /projects/:id/filesRead the live files — ?list=true for names only, ?paths= for chosen files
PATCH /projects/:id/filesEdit files in place: text edits, new or rewritten files, and deletePaths to remove files
DELETE /projects/:idDelete a site and everything stored for it
GET /accountYour plan, usage, limits and features
GET PUT /projects/:id/chatbotRead or set up a site's AI chatbot (setting it up needs Plus or Pro)
GET /guides/:topicWritten guides for workflow, forms, data, bookings, chatbot, media and limits

Forms, data, bookings and media

POST GET /formsCreate a form endpoint, or list them
GET PATCH DELETE /forms/:idRead, change or delete one
GET /forms/:id/submissionsRead its messages
POST GET /dataCreate a data collection, or list them
GET PATCH DELETE /data/:idRead, change or delete one
PUT PATCH /data/:id/rowsReplace or edit its rows
POST GET /bookingsCreate a booking page, or list them
GET PATCH DELETE /bookings/:idRead, change or delete one
GET /bookings/:id/servicesIts services list
POST GET /mediaUpload an image (field file, up to 5 MB), or list them
DELETE /media/:idDelete an image

Request fields, full responses and examples in Node.js and Python are in the developer reference. The MCP server uses these same endpoints, so anything an AI assistant does for you, your own code can do too.

Deploy HTML

html is required. css and js are optional — they are saved as style.css and script.js and linked into the page. Each one can be up to your plan's file size (5 MB on Free, 50 MB on Plus, 100 MB on Pro) in a request of up to 50 MB. name becomes the address, so my-site is my-site.dplooy.com; it is tidied the same way as in the dashboard (lower case, hyphens).

Request
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":"<h1>Hello</h1>","name":"my-site"}'
Response — 201 Created
{  "success": true,  "url": "https://my-site.dplooy.com",  "projectId": "a1b2c3d4-e5f6-...",  "isRedeploy": false,  "plan": "pro",  "expiresAt": null}

Deploying again with the same name updates that site in place — isRedeploy is true, and the address and analytics carry on.

Deploy a ZIP

Send the archive as multipart/form-data in a field named file. It needs index.html at the top (or inside one folder at the top), and folders, styles, scripts, images and fonts keep their paths. projectName sets the address and name the display name. A ZIP can be up to 50 MB on Free and 500 MB on Plus and Pro, every file in it up to your plan's file size, and the unpacked site has to fit in your storage.

Request
curl -X POST https://api.dplooy.com/api/v1/deploy/zip \  -H "Authorization: Bearer dpk_live_your_key_here" \  -F "file=@site.zip" \  -F "projectName=my-site"

The response adds fileCount and a list of warnings to the fields above.

Rate and deploy limits

  • Requests are limited to 30 requests a minute per IP address, on every plan. Past it the API answers 429 RATE_LIMIT_EXCEEDED; wait a minute and retry.
  • Deploys — from the API or anywhere else — are limited to 15 an hour and 40 a day on Free, and 40 an hour and 150 a day on Plus and Pro. Only deploys that succeed count. Past it: 429 DEPLOY_LIMIT_REACHED.
  • Reading files returns up to 2 MB per call, and one PATCH can delete up to 200 files.

Errors

Check the HTTP status first. The body comes in one of two shapes:

Deploy, files and chatbot endpoints
{  "error": "<what went wrong, in words>",  "code": "NOT_FOUND"}
Authentication, rate limits, and the forms, data, bookings and media endpoints
{  "message": "<what went wrong, in words>",  "error": "INVALID_API_KEY"}
400Validation failed, with the problem fields in details
400PROJECT_LIMIT_REACHEDYour plan's sites are all in use
400FILE_TOO_LARGEA file — or a file inside the ZIP — is over your plan's file size; the message names it
400STORAGE_LIMIT_REACHEDThe site doesn't fit in the storage you have left
400PLAN_LIMITA ZIP with more files than your plan allows
413UPLOAD_TOO_LARGEThe ZIP is over 500 MB
400NO_INDEX_HTMLThe ZIP has no index.html at the top
400UNBUILT_PROJECTThe ZIP is framework source code — build it first
400SECURITY_THREAT_DETECTED or SECURITYThe security scan blocked the content; the reasons are in the response
400INVALID_FILE_TYPE/deploy/zip accepts ZIP files only
401INVALID_API_KEYThe key is missing, wrong or revoked
404NOT_FOUNDThe site doesn't exist or isn't yours
409PROJECT_KIND_MISMATCHA ZIP sent to a single-page site, or HTML to a multi-file one
409DEPLOY_IN_PROGRESSAnother update of the same site is running — retry in a moment
429RATE_LIMIT_EXCEEDEDMore than 30 requests a minute
429DEPLOY_LIMIT_REACHEDYour plan's hourly or daily deploys are used up
500DEPLOY_FAILED or ZIP_DEPLOY_FAILEDSomething failed on our side during the deploy

Manage and rotate keys

  • Settings → API Keys lists your keys by name and last four characters, with the last 50 requests each one made.
  • Revoke a key there and it stops working at once; its request log is deleted with it.
  • To rotate a key: create the new one, switch your tools and secrets over, then revoke the old one.
  • Lost a key? It can't be shown again — revoke it and create a new one.