Skip to main content
Base URL is https://htmldrop.app/api/v1. Every endpoint here needs an API token.
Most authenticated endpoints require a verified email and return 403 {"error":"email_not_verified"} otherwise. The exceptions — so a new account can get one site live before confirming — are POST /sites, GET /sites, GET /sites/{id}, DELETE /sites/{id}, POST /sites/{id}/upload and POST /sites/{id}/upload-bundle. In practice this only affects dashboard sessions: API tokens can only be created by an already-verified account.

Create a site

Both fields are optional — omit slug for a random one, omit name to leave it blank.
Returns 201:
Creating a site only reserves the slug — it has no content until you upload.

Upload a single file

Multipart with one file field: .html/.htm is served as-is, .md is rendered to HTML. Every upload creates a version and promotes it live.
Returns 201:

Upload a folder or .zip

Two accepted shapes:
Repeated files fields with a parallel paths field giving each file’s relative path. This is what the dashboard’s folder picker sends, and what multipart clients that can’t preserve directory structure should use.
Either way index.html must exist at the root of the bundle. The response has the same shape as a single-file upload.

List and read

GET /sites returns an array; GET /sites/{id} returns one site in the same shape POST /sites returns.

Update settings

PATCH /sites/{id} changes a site’s configuration — name, slug, password, analytics, and spa_fallback:

Delete

Returns 204. Deletion is immediate and permanent.

The authenticated account

Returns the signed-in user and tenant: email, verification status, plan, role, and the organisations available to switch between.

Usage and export

usage reports consumption against your plan’s caps. export returns every drop as a .zip — there is no lock-in and no export fee.