Changelog
Contract changes are listed by date. Subscribe to the RSS feed to follow them.
2026-09-05 — Method handling, sitemap, and examples
- Requests with a known path but an unsupported method now answer
405with anAllowheader and the standard error envelope (method_not_allowed);OPTIONSon a known path answers204. Unknown paths still answer404. docs_urlon errors links to theerrorClasssection of the errors page, which now lists everycodethe class can carry.- Every response carries
X-Request-Id; API responses default toCache-Control: no-store. GET /v1/usage?resource=ledgerand the dashboard aliasesPUT/DELETE /v1/account?resource=webhookare documented in OpenAPI. Unknownresourceoractionvalues answer400.- A Bearer-authenticated client is never refused as a crawler, whatever its User-Agent.
GET /v1/jobs/{id}/archiveanswers409(archive_failed) instead of a200body when a build has exhausted its attempts.- Runnable curl, Node, Python, Go, and n8n examples are published at
/docs/examples. /.well-known/api-catalogis an RFC 9727 Linkset served asapplication/linkset+json.
2026-09-04 — v1 surface
- Passwordless accounts, hashed Bearer keys with rotation and grace-period revocation, and dashboard sessions.
GET /v1/transcriptin seven formats with explicit requested, delivered, fallback, and translation fields;raw=1attachments;202polling for long cold fetches.GET /v1/videofacts,GET /v1/videoschannel and playlist listing with cached flags and cold counts, andPOST /v1/videos/resolvefor pasted lists.- Bulk jobs for up to 500 videos with exact reservation, settlement, pause, resume, retry, and cancel; manifests, per-file downloads, SSE progress, and queued ZIP archives with 80 MiB parts and seven-day expiry.
- Signed webhooks with bounded retries, per-job endpoint overrides, and delivery state on the job.
- Credits, free and paid limits, one-time Stripe credit blocks, self-service refunds, and automatic outage credits.
- Public
GET /v1/statuswith rolling p50/p95 latency; keyed MCP server; Agent Skill discovery and an experimental server card.
Smoke-test the current surface
The public status response is the safest post-upgrade smoke test. Maintained runnable variants are in the examples directory.
curl https://api.scripthaul.com/v1/status
import json, urllib.request
with urllib.request.urlopen("https://api.scripthaul.com/v1/status") as response:
status = json.load(response)
print(status["status"], status["canary"])
const response = await fetch("https://api.scripthaul.com/v1/status");
const status = await response.json();
console.log(status.status, status.canary);
response, err := http.Get("https://api.scripthaul.com/v1/status")
if err != nil { log.Fatal(err) }
defer response.Body.Close()
io.Copy(os.Stdout, response.Body)