droply.host ← Home

Developers

API reference

Deploy and manage sites programmatically.

The Droply API lets you create sites and push deployments from your own scripts and from integrations (the ChatGPT GPT Action, Zapier, n8n, VS Code, and the Chrome extension all use it). The machine-readable spec is published at /api/v1/openapi.json (OpenAPI 3.1).

Base URL

https://droply.host/api/v1

Authentication

Create a personal access token in your dashboard under API tokens, then send it as a bearer token on every request. API access requires a paid plan.

Authorization: Bearer YOUR_TOKEN

Verify a token at any time:

curl https://droply.host/api/v1/user \
  -H "Authorization: Bearer YOUR_TOKEN"

Tokens you create on the API tokens page have Full access. Changing a site's settings, deleting a site, publishing a draft and rolling back need one. The deploy-only tokens that the browser and editor extensions make when you sign in there can create sites and deploy, but nothing more.

Create a site

Reserves a subdomain, served at <subdomain>.droply.id. Leave out subdomain and Droply picks a free one.

curl -X POST https://droply.host/api/v1/sites \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"subdomain":"my-portfolio","name":"My Portfolio"}'

Find a site

Site and deployment ids are UUIDs. To find a site's id without paging through the list, filter it by subdomain, or by the address a visitor types (its Droply address or a connected custom domain):

curl "https://droply.host/api/v1/sites?subdomain=my-portfolio" \
  -H "Authorization: Bearer YOUR_TOKEN"

curl "https://droply.host/api/v1/sites?host=www.example.com" \
  -H "Authorization: Bearer YOUR_TOKEN"

Deploy

Upload a file (an HTML file, a ZIP of a static site, a PDF, or an image) or send raw HTML. The file's extension decides how it is served, so send its real name. Processing is asynchronous: the call returns 202 with a deployment you can poll.

# Upload a ZIP of a static site
curl -X POST https://droply.host/api/v1/sites/SITE_ID/deployments \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -F "[email protected]"

# …or publish raw HTML (up to 12 MB; send a bigger page as a file)
curl -X POST https://droply.host/api/v1/sites/SITE_ID/deployments \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"html":"<!doctype html><h1>Hello</h1>"}'

Check deployment status

Poll until status is live (the live_url is then included) or failed (see error_message).

curl https://droply.host/api/v1/deployments/DEPLOYMENT_ID \
  -H "Authorization: Bearer YOUR_TOKEN"

Drafts, publishing and rollback

Add draft to a deploy to save the version without making it live: it is processed and scanned, then waits as staged while the site keeps serving what it served before. Publish it when you are ready, or make a previous version live again. Both return 202 while the change is queued; poll the deployment until it is live.

# Save a draft (multipart sends draft=1)
curl -X POST https://droply.host/api/v1/sites/SITE_ID/deployments \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -F "[email protected]" -F "draft=1"

# Publish it
curl -X POST https://droply.host/api/v1/deployments/DEPLOYMENT_ID/publish \
  -H "Authorization: Bearer YOUR_TOKEN"

# Roll back to a previous version (any superseded deployment)
curl -X POST https://droply.host/api/v1/deployments/DEPLOYMENT_ID/rollback \
  -H "Authorization: Bearer YOUR_TOKEN"

Password and auto-expiry

Change only what you send. password_protected: false removes the password; expires_at takes an ISO 8601 date and time with its offset, or null to remove the timer.

curl -X PATCH https://droply.host/api/v1/sites/SITE_ID \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"password":"s3cret-preview","expires_at":"2026-12-01T18:00:00Z"}'

Endpoints

  • GET /user -the authenticated account & plan
  • GET /sites -list your sites (filter with subdomain or host)
  • POST /sites -create a site
  • GET /sites/check?subdomain= -is a subdomain free?
  • GET /sites/{site} -get a site
  • PATCH /sites/{site} -change its name, password or auto-expiry (Full access)
  • DELETE /sites/{site} -delete a site (Full access). A site in a space protected against accidental deletion is deleted from the dashboard only.
  • POST /sites/{site}/deployments -deploy (file or html, optionally as a draft)
  • GET /sites/{site}/deployments -list a site's deployments
  • GET /deployments/{deployment} -deployment status
  • POST /deployments/{deployment}/retry -retry a failed deployment
  • POST /deployments/{deployment}/publish -publish a draft (Full access)
  • POST /deployments/{deployment}/rollback -make a previous version live (Full access)

Errors & limits

  • 401 -missing or invalid token.
  • 403 -your plan does not include API access or this feature, or the token is not permitted to do this (some actions need a Full access token).
  • 404 -the resource doesn't exist or isn't yours.
  • 409 -the version is not one this action applies to (for example, publishing a version that is not a draft).
  • 413 -the upload is larger than one request may carry (100 MB).
  • 422 -validation failed (an errors object lists the fields).
  • 429 -rate limit exceeded. Requests are throttled per token, and publishing drafts and rolling back are capped at 30 an hour per account. Wait for the seconds in the Retry-After header.

More documentation

  • Building and editing pages with the AI builder: Describe a page and publish it, or tell the builder what to change on a live site. What it costs and what it refuses.
  • Publishing a project from an AI builder: Lovable, bolt.new, v0 and Cursor give you source code. One export step turns it into a site.
  • Sharing a version for review: Send one private address showing one version, collect comments on the elements they are about, and answer them.
  • Publish from Claude: Connect Claude and let it publish pages and sites to your account, on every plan.
  • All documentation: the full index, including the custom-domain guides.