Skip to main content

API

Documentation Map

API

Public Dynamic Surfaces

This repo intentionally exposes only a very small dynamic surface.

GET /health

  • auth: none
  • purpose: minimal liveness/status signal for the Pages runtime
  • response shape:
{
"ok": true,
"status": "ok",
"tool_key": "jhf-web",
"legacy_slugs": ["jadda-web", "solarisara-web"],
"runtime_kind": "website",
"public_base_url": "https://helpifyr.com",
"request_path": "/health",
"checks": {
"pages_function_runtime": true,
"turnstile_secret_configured": true,
"contact_webhook_configured": false
},
"checked_at": "2026-04-01T00:00:00.000Z"
}

GET /ready

  • auth: none
  • purpose: minimal readiness signal for the public website runtime
  • response shape:
{
"ok": true,
"ready": true,
"tool_key": "jhf-web",
"legacy_slugs": ["jadda-web", "solarisara-web"],
"runtime_kind": "website",
"notes": [
"This readiness surface confirms that the website runtime is serving public routes."
],
"checks": {
"public_routes_expected": true,
"contact_intake_surface_present": true,
"turnstile_secret_configured": true,
"contact_webhook_configured": false
},
"checked_at": "2026-04-01T00:00:00.000Z"
}

POST /api/contact

  • auth: Cloudflare Turnstile token plus server-side validation
  • consumes:
    • application/json
    • multipart/form-data
  • required fields:
    • name
    • email
    • interest
    • message
  • contract source:
    • contracts/contact-intake.contract.json (contracts/contact-intake.contract.json)

Possible delivery outcomes:

  • webhook
  • mailto_fallback
  • mailto

Example success response:

{
"ok": true,
"intake_id": "lead_1234567890_ab12cd34",
"delivery": "webhook",
"message": "Turnstile verified successfully and the intake was forwarded."
}

GET /version.json

  • auth: none
  • purpose: small machine-readable version and update visibility surface
  • stability: stable
  • source file:
    • version.json (version.json)
  • validation path:
  • scripts/export-fabric-metadata.sh (scripts/export-fabric-metadata.sh)
  • scripts/fabric-selfcheck.sh (scripts/fabric-selfcheck.sh)

Versioning

There is no dynamic /version endpoint. Version is currently exposed through:

  • package.json
  • version.json
  • Git commit on main
  • exported metadata from scripts/export-fabric-metadata.sh

Runtime surface regression scope

The fast runtime smoke path also validates:

  • GET /status.json
  • GET /version.json
  • GET /contracts/contact-intake.contract.json
  • negative POST /api/contact paths for:
    • missing required fields
    • missing Turnstile token
    • honeypot trigger

Reference contract:

  • contracts/public-runtime-surfaces.contract.json (contracts/public-runtime-surfaces.contract.json)
  • docs/INTAKE_SECURITY_BOUNDARY.md (docs/INTAKE_SECURITY_BOUNDARY.md)