Developer documentation
JXHQ Deploy API
Create sites, upload ZIP files, and track deployments from scripts, CI/CD, or your own application.
Base URL
https://deploy.jxhq.net/api/v1Authentication
Verify your email address and enable 2FA first. Then create a key under API keys. A key is shown in full only once.
Send the key as a Bearer token. Never place it in browser code, a repository, or a public ZIP file.
Authorization: Bearer jxhq_live_YOUR_API_KEY
Content-Type: application/json
sites:readView sites and deployments.
sites:writeCreate and delete sites.
deployments:createStart new ZIP deployments.
Sites
/sitesReturns every non-deleted site owned by the account. Requires sites:read.
curl https://deploy.jxhq.net/api/v1/sites \
-H "Authorization: Bearer $JXHQ_API_KEY"/sitesCreates an empty site with an automatically generated *.jxhq.page address. Requires sites:write.
curl -X POST https://deploy.jxhq.net/api/v1/sites \
-H "Authorization: Bearer $JXHQ_API_KEY" \
-H "Content-Type: application/json" \
-d '{"name":"My documentation"}'Response: 201 Created. Save data.id for subsequent requests.
/sites/:idReturns one site and its deployment history. Requires sites:read.
curl https://deploy.jxhq.net/api/v1/sites/$SITE_ID \
-H "Authorization: Bearer $JXHQ_API_KEY"/sites/:idDeletes the site and makes it unavailable. Requires sites:write. This action cannot be undone through the API.
curl -X DELETE https://deploy.jxhq.net/api/v1/sites/$SITE_ID \
-H "Authorization: Bearer $JXHQ_API_KEY"Response: 204 No Content.
Upload a deployment
Upload one ZIP using the multipart field site. The ZIP may be up to 25 MB and must contain an index.html file. Requires deployments:create.
/sites/:id/deploymentscurl -X POST https://deploy.jxhq.net/api/v1/sites/$SITE_ID/deployments \
-H "Authorization: Bearer $JXHQ_API_KEY" \
-F "site=@website.zip;type=application/zip"{
"data": {
"id": "deployment-uuid",
"status": "queued"
}
}Response: 202 Accepted. Then request GET /sites/:id to track progress.
Statuses
| Status | Meaning |
|---|---|
| empty | The site exists but has no deployment yet. |
| scanning | Files are being extracted and scanned. |
| deploying | Approved files are being published. |
| deployed | The site is live. |
| suspended | The site has been disabled by an administrator. |
| failed | Scanning or publishing failed. |
| deleted | The site has been deleted. |
Errors and limits
Errors are returned as JSON, for example {"error":"site_not_found"}. The API is limited to 120 requests per minute per IP address.
400 Bad RequestThe ZIP is missing or invalid.
401 UnauthorizedThe key is missing, expired, or invalid.
403 ForbiddenThe API key is missing the required scope.
404 Not FoundThe site does not exist or belongs to another account.
429 Too Many RequestsThe rate limit has been exceeded.
500 Internal Server ErrorUnexpected server error; try again later.