Integrations
CI with plain curl
No SDK, no action, no lock-in — the deploy is one HTTP request, so any CI that has curl can publish. These recipes are GitHub Actions syntax but translate to anything.
Publish a report
Deploy a single HTML file and drop the link into the job summary:
yaml
- name: Publish report
run: |
URL=$(curl -fsS -X POST https://hurl.page/deploy \
-H "Content-Type: text/html" \
--data-binary @build/report.html | jq -r .url)
echo "### Report: $URL" >> "$GITHUB_STEP_SUMMARY"Stable preview channels
With an API key in your repo secrets, named drops give every PR a stable URL — same link every push, fresh content:
yaml
- name: Deploy PR preview
run: |
cd dist && zip -qr - . | curl -fsS -X POST \
"https://hurl.page/deploy?name=pr-${{ github.event.number }}" \
-H "Authorization: Bearer ${{ secrets.HURL_API_KEY }}" \
-H "Content-Type: application/zip" \
--data-binary @- | jq -r .urlThe response’s replaced field tells you whether this push updated an existing preview or created the channel.
Zipping on the fly
zip -qr - . writes the archive to stdout and --data-binary @- streams it straight into the request — no temp files, works in any POSIX shell.
Use -fsS on curl so a failed deploy fails the CI step loudly instead of burying an error JSON in the logs.
Edit this page on GitHub (opens in a new tab)
Last updated Jun 12, 2026