Henry Onboard provides a REST API and MCP server for programmatic access.
All authenticated endpoints require a Bearer token from Supabase Auth. Include the token in the Authorization header:
Authorization: Bearer <supabase_access_token>
Admin endpoints require the x-admin-key header matching your ADMIN_API_KEY env var.
https://your-app.vercel.app
/api/v1/clientsAuth requiredList all clients for the authenticated user
{ "clients": [{ "id": "uuid", "name": "string", "email": "string", "status": "invited|started|completed", "slug": "string", "created_at": "timestamp" }] }/api/v1/clientsAuth requiredCreate a new client and send invite email
{ "name": "string", "email": "string", "project_name": "string", "template_id": "uuid" }{ "client": { "id": "uuid", "slug": "string", ... } }/api/v1/clients/:idAuth requiredGet a single client with all data
{ "client": { ...client, "questionnaire_answers": {}, "milestones": [] } }/api/v1/clients/:idAuth requiredUpdate client data
{ "status": "string", "milestones": [] }{ "client": { ... } }/api/v1/clients/:idAuth requiredDelete a client and all associated data
{ "success": true }/api/v1/templatesAuth requiredList all templates for the authenticated user
{ "templates": [{ "id": "uuid", "name": "string", "questions": [], "request_assets": true, "request_credentials": false }] }/api/v1/templatesAuth requiredCreate a new template
{ "name": "string", "questions": [{ "id": "string", "label": "string", "type": "text|textarea|select", "required": true }], "request_assets": true, "request_credentials": false }{ "template": { "id": "uuid", ... } }/api/onboard/:slug/saveSave client onboarding step progress. No auth required.
{ "step": "questionnaire|credentials|milestones", "data": {} }{ "success": true }/api/onboard/:slug/uploadUpload a brand asset file. No auth required. Multipart form data.
FormData: file (binary), name (string)
{ "asset": { "id": "uuid", "name": "string", "file_path": "string" } }/api/mcpAuth requiredMCP server endpoint. Supports tools: list_clients, get_client, create_client, onboarding_status
{ "method": "tools/call", "params": { "name": "list_clients", "arguments": {} } }MCP protocol response
/api/adminAdmin overview. Requires ADMIN_API_KEY header.
{ "status": "ok", "version": "1.0.0" }/api/admin/statsPlatform-wide stats
{ "total_users": 0, "total_clients": 0, "total_completed": 0 }/api/admin/usersList all users
{ "users": [] }/api/stripe/checkoutAuth requiredCreate a Stripe Checkout session. If STRIPE_SECRET_KEY not set, redirects to /pricing?demo=1
{ "price_id": "string" }{ "url": "https://checkout.stripe.com/..." }/api/stripe/portalAuth requiredCreate a Stripe Customer Portal session
{ "url": "https://billing.stripe.com/..." }/api/stripe/webhookStripe webhook handler
{ "received": true }