API versioning
# Legacy path: the response carries the deprecation headers
curl -si -H "Authorization: Bearer $HAIL_API_KEY" "$HAIL_API_URL/whoami" | grep -i -E '^(HTTP|deprecation|link)'
# HTTP/1.1 200 OK
# deprecation: true
# link: </v1/whoami>; rel="successor-version"
# Canonical path: no deprecation headers
curl -si -H "Authorization: Bearer $HAIL_API_KEY" "$HAIL_API_URL/v1/whoami" | grep -i -E '^(HTTP|deprecation|link)'
# HTTP/1.1 200 OK/v1/<resource> is the canonical, documented form of every customer-facing
Hail API route. It appears in the OpenAPI spec
(openapi/openapi.yaml)
and is what the CLI and generated clients target.
Legacy unprefixed paths
Routes without the /v1 prefix (e.g. /whoami instead of /v1/whoami)
still work, for existing integrations built before versioning shipped. They
are not in the OpenAPI spec and should not be used for new integrations.
Every response from a legacy customer route carries the headers below, set by
api/hailhq/api/deprecation.py.
The one exception is a 429 returned by the general rate limiter, which is
produced before that step runs.
Deprecation: true— this path is deprecated (see the IETF Deprecation HTTP header field).Link: </v1/...>; rel="successor-version"— the canonical/v1path that replaces it, as a relative path (not an absolute URL).
Paths that have no /v1 twin (/healthz, /openapi.json, /docs,
/redoc) never carry these headers.
Sunset
No sunset date is set for the legacy paths yet. If one is scheduled, it
will be announced here and via a Sunset response header (RFC 8594) added
ahead of the change, giving integrators advance notice before the
unprefixed paths stop working.
Provider-facing routes are the exception: Hail still emits /unsubscribe
links in sent emails and registers /sms/status and /sms/telnyx callbacks
with the SMS providers on the unprefixed path. Those must keep working, or be
migrated first, before any sunset.
react-email
Hail doesn't render React or store templates — you render a react-email component to a string and send that string. The body goes out exactly as given: a full <!DOCTYPE html>…</html> document passes through unchanged.
Bring your own LLM
Point a Hail voice call at your own OpenAI-compatible endpoint. Your agent becomes the brain of the call: Hail handles telephony, speech-to-text, text-to-speech, turn detection, and tools, and asks your endpoint what to say on every turn.