API Reference

Complete reference for the Hylo Knowledge API at api.hylo.pro

Authentication

All endpoints require an API key via the Authorization header:

curl -H "Authorization: Bearer hylo_sk_your_key_here" \
  https://api.hylo.pro/v1/actions

API keys use the format hylo_sk_ followed by 32 hex characters. Get your key from the dashboard.

Rate Limits

PlanLimitReset
Trial (7 days)50 req/dayRolling 24h
Hylo Pro ($19/mo)10,000 req/dayRolling 24h

Error Codes

All errors return a standard JSON envelope:

{
  "error": {
    "code": "UNAUTHORIZED",
    "message": "Missing or invalid API key",
    "status": 401
  }
}
CodeStatusMeaning
UNAUTHORIZED401Missing or invalid API key
SUBSCRIPTION_INACTIVE403Trial expired or subscription canceled
RATE_LIMITED429Too many requests for your plan
NOT_FOUND404Resource not found
INTERNAL_ERROR500Server error

Endpoints

Base URL: https://api.hylo.pro/v1

GET/v1/actions

List and search workflow actions.

Parameters

NameRequiredDescription
categoryNoFilter by category name
qNoKeyword search across action names and descriptions

Response (200)

{
  "total": 102,
  "categories": 19,
  "actions": [
    {
      "name": "Send Email",
      "category": "Communication",
      "description": "Sends an email to the contact...",
      "fields": ["to", "subject", "body", "template_id"]
    }
  ]
}
GET/v1/triggers

List and search workflow triggers.

Parameters

NameRequiredDescription
categoryNoFilter by category name
qNoKeyword search

Response (200)

{
  "total": 70,
  "categories": 14,
  "triggers": [
    {
      "name": "Contact Created",
      "category": "Contact Events",
      "description": "Fires when a new contact is created",
      "filters": ["source", "tags", "pipeline"]
    }
  ]
}
GET/v1/schemas

List and search GHL API endpoint schemas.

Parameters

NameRequiredDescription
categoryNoe.g., "contacts", "workflows", "calendars"
methodNoGET, POST, PUT, DELETE
qNoKeyword search

Response (200)

{
  "total": 423,
  "endpoints": [
    {
      "name": "create-contact",
      "category": "contacts",
      "method": "POST",
      "path": "/contacts/",
      "token_type": "Sub-Account",
      "summary": "Create a new contact"
    }
  ]
}
GET/v1/schemas/{endpoint_name}

Get full schema for a specific API endpoint.

Parameters

NameRequiredDescription
endpoint_nameYesEndpoint name (path parameter)

Response (200)

{
  "name": "create-contact",
  "category": "contacts",
  "method": "POST",
  "path": "/contacts/",
  "token_type": "Sub-Account",
  "scopes": ["contacts.write"],
  "request_schema": {
    "type": "object",
    "required": ["firstName", "email"],
    "properties": {
      "firstName": { "type": "string" },
      "email": { "type": "string", "format": "email" }
    }
  }
}
GET/v1/navigate/{feature}

Get navigation hints for a GHL feature.

Parameters

NameRequiredDescription
featureYesOne of: workflows, calendars, contacts, opportunities, payments, settings, ai-agents, marketing, sites, memberships, reputation, reporting

Response (200)

{
  "feature": "workflows",
  "url_pattern": "/v2/location/{locationId}/automation/workflows",
  "sidebar_path": ["Automation", "Workflows"],
  "tabs": ["Workflows", "Global Workflow Settings"],
  "tips": [
    "Direct URL navigation is more reliable than sidebar",
    "Dismiss the 'AI Builder Enabled' popup on first visit"
  ]
}
GET/v1/protocols/{feature}

Get the full UI protocol for a GHL feature — verified selectors, modal patterns, form fields.

Parameters

NameRequiredDescription
featureYesOne of: workflows, calendars, custom-values, forms-sites, ai-bot, email-domain, marketing, common

Response (200)

{
  "feature": "workflows",
  "version": "2026-02-16",
  "navigation": {
    "url": "/v2/location/{locationId}/automation/workflows",
    "selectors": {
      "create_button": "button:has-text('Create Workflow')",
      "search_input": "input[placeholder*='Search']"
    }
  },
  "modals": [...],
  "forms": {...}
}
POST/v1/templates/workflow

Get a workflow template based on a natural language description. Deterministic template matching — not an LLM call.

Request Body

{
  "objective": "Send 3 follow-up emails after form submission",
  "constraints": {
    "max_steps": 10,
    "include_delays": true
  }
}

Response (200)

{
  "template": {
    "name": "Form Follow-Up Sequence",
    "trigger": {
      "type": "Contact Form Submitted",
      "category": "Contact Events"
    },
    "steps": [
      { "action": "Send Email", "config": { "delay": null } },
      { "action": "Wait", "config": { "delay": "1 day" } },
      { "action": "Send Email", "config": {} },
      { "action": "Wait", "config": { "delay": "3 days" } },
      { "action": "Send Email", "config": {} }
    ]
  }
}
POST/v1/validate

Validate a workflow configuration against known constraints.

Request Body

{
  "trigger": "Contact Created",
  "actions": ["Send Email", "Wait", "Add Tag"]
}

Response (200)

{
  "valid": true,
  "warnings": [],
  "suggestions": [
    "Consider adding a Wait step between Send Email actions"
  ]
}

Setup Guides

OpenClaw (ClawHub Skill)

Install the hylo-ghl skill from ClawHub, then add your API key:

// ~/.openclaw/openclaw.json
{
  "skills": {
    "entries": {
      "hylo-ghl": {
        "enabled": true,
        "apiKey": "hylo_sk_your_key_here"
      }
    }
  }
}

MCP Server (Claude Code / Cursor / Windsurf)

Add the hylo-mcp server to your IDE's MCP configuration:

// Claude Code: ~/.claude/claude_desktop_config.json
// Cursor: ~/.cursor/mcp.json
{
  "mcpServers": {
    "hylo": {
      "command": "npx",
      "args": ["-y", "hylo-mcp"],
      "env": {
        "HYLO_API_KEY": "hylo_sk_your_key_here"
      }
    }
  }
}

REST API (Direct)

Call the API directly with curl or any HTTP client:

# Search for email-related workflow actions
curl -s \
  -H "Authorization: Bearer hylo_sk_your_key_here" \
  "https://api.hylo.pro/v1/actions?q=email"

# Get schema for create-contact endpoint
curl -s \
  -H "Authorization: Bearer hylo_sk_your_key_here" \
  "https://api.hylo.pro/v1/schemas/create-contact"