/api/v1/access-requestsSubmit a public access request; no bearer token required.
REST API documentation
Authenticate an existing account, upload a project ZIP, and follow one parent operation through Analyze, Build, and Deploy.
https://api.sitedropper.comQuickstart
Use an existing Sitedropper account. Public API registration is currently disabled, and REST JWTs are separate from MCP OAuth access tokens.
Log in over HTTPS, then store the returned token in a secret manager or protected environment variable.
curl --fail-with-body -X POST "https://api.sitedropper.com/api/v1/auth/login" \
-H "Content-Type: application/json" \
-d '{"email":"[email protected]","password":"your-password"}'{
"token": "<jwt>",
"expires_at": "<ISO-8601 timestamp>",
"user": { "email": "[email protected]" }
}The one-shot multipart endpoint creates or selects a project, accepts the ZIP, and queues the complete deployment chain. Draft is the safe default; other visibility choices depend on account entitlements.
export SITEDROPPER_API="https://api.sitedropper.com"
export SITEDROPPER_TOKEN="<token from login response>"
curl --fail-with-body -X POST "$SITEDROPPER_API/api/v1/local-to-live" \
-H "Authorization: Bearer $SITEDROPPER_TOKEN" \
-F "[email protected]" \
-F "name=studio" \
-F "visibility=draft"{
"action": "local_to_live_queued",
"project": { "url": "https://studio.apps.sitedropper.com" },
"operation": { "id": "<operation-id>", "status": "running", "progress": 5 },
"next_step": "poll the parent operation until it finishes"
}Retain operation.id from the deployment response. Do not start a second deployment while Analyze, Build, and Deploy are already chaining.
export OPERATION_ID="<operation.id from deploy response>"
curl --fail-with-body \
-H "Authorization: Bearer $SITEDROPPER_TOKEN" \
"$SITEDROPPER_API/api/v1/operations/$OPERATION_ID"Authentication
Authorization: Bearer <token> on every protected request.Large uploads
Create an authenticated upload session when an agent or external uploader should send a ZIP without receiving your REST token. The returned upload_url is short-lived, one-time, and itself a credential.
curl --fail-with-body -X POST "$SITEDROPPER_API/api/v1/upload-sessions" \
-H "Authorization: Bearer $SITEDROPPER_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "studio",
"visibility": "draft",
"filename": "site.zip",
"runtime": "static",
"framework": "static",
"skip_build": true,
"root_directory": "."
}'export UPLOAD_URL="<upload_url from session response>"
curl --fail-with-body -X POST "$UPLOAD_URL" \
-F "[email protected]"New-project upload sessions cannot carry environment variables or an access password. Create the project first or use the authenticated Local-to-Live endpoint when those values are required.
Asynchronous work
Queued work can report queued, running, succeeded, failed, or canceled. The operation detail also includes child state, build-log context, queue information, maybe_stuck, and a recommended next step when available.
Archive shape and runtime detection.
Dependency, command, and image preparation.
Runtime release, routing, and final URL.
Poll with bounded backoff. Stop when the parent operation reaches a terminal state; inspect its guidance before using cancel or retry.
Reference
Every protected route is account-scoped by the JWT. Project resources additionally verify that the project belongs to the authenticated account.
/api/v1/access-requestsSubmit a public access request; no bearer token required.
/api/v1/auth/loginExchange existing account credentials for a REST JWT.
/api/v1/meReturn the authenticated user and account identity.
/api/v1/billing/entitlementsRead plan limits and currently allowed capabilities.
/api/v1/local-to-liveUpload a ZIP and queue Analyze → Build → Deploy for a new or selected project.
/api/v1/projects/{projectID}/local-to-liveRun Local-to-Live against an existing project.
/api/v1/upload-sessionsCreate a short-lived, one-time direct upload URL.
/api/v1/upload-sessions/{token}/uploadSend the ZIP to a prepared upload session without forwarding the JWT.
/api/v1/operations/{operationID}Read parent operation progress, child state, logs summary, and next-step guidance.
/api/v1/operations/{operationID}/cancelCancel eligible queued or running work.
/api/v1/operations/{operationID}/retryRetry an eligible failed or canceled parent operation.
/api/v1/projects/List projects or create a project. The collection route currently uses a trailing slash.
/api/v1/projects/{projectID}/Read, update, or queue deletion of an account-owned project.
/api/v1/projects/{projectID}/versionsList uploaded and detected project versions.
/api/v1/projects/{projectID}/buildsList builds; build detail and retry routes are available below this path.
/api/v1/projects/{projectID}/deploymentsList deployments; detail and retry routes are available below this path.
/api/v1/projects/{projectID}/environmentList variable names/digests or set an encrypted environment value.
/api/v1/projects/{projectID}/access-grantsList or add approved email access for a Private project.
Errors and current limits
400Validation or service request error401Missing, invalid, or expired authentication403Registration, plan, or entitlement restriction404Missing or inaccessible resourceErrors generally use {"error":"message"}. Plan restrictions can also include machine-readable code, feature, plan, required_plan, limit, and usage fields.
Archive size and runtime support depend on deployed configuration. Do not assume databases, persistent volumes, cron jobs, background workers, multi-container applications, runtime log retrieval, custom domains, or rollback controls are available.