Complete API reference for the GitHub webhook monitoring service with Claude AI integration.
- Production:
https://hls.clidecoder.com - Local Development:
http://localhost:4665
GET /api/webhooks
Returns a paginated list of webhook events, sorted by most recent first.
[
{
"id": 22,
"timestamp": "2025-07-17T03:14:04",
"event_type": "issue_comment",
"action": "created",
"delivery_id": "172d3de0-62bc-11f0-878a-6edd72b6346e",
"signature": "sha256=...",
"payload": "{...}",
"sender_login": "shawn-storie",
"sender_id": 12345,
"repository": "shawn-storie/HookHaven",
"verified": true
}
]# Get all webhooks
curl https://hls.clidecoder.com/api/webhooks
# Filter by repository (query parameter)
curl "https://hls.clidecoder.com/api/webhooks?repository=zpaper-com/patient-sprkz"
# Get specific event types
curl "https://hls.clidecoder.com/api/webhooks?event_type=issues"GET /api/webhooks/:id
Returns detailed information for a specific webhook event.
id(required) - Webhook ID
{
"id": 21,
"timestamp": "2025-07-17T03:13:16",
"event_type": "issues",
"action": "opened",
"delivery_id": "test-script-1752721996501",
"signature": "sha256=abc123...",
"payload": {
"action": "opened",
"issue": {
"number": 1,
"title": "Test @clide Auto-Execution",
"body": "...",
"html_url": "https://github.com/shawn-storie/HookHaven/issues/1"
},
"repository": {
"full_name": "shawn-storie/HookHaven"
}
},
"sender_login": "shawn-storie",
"sender_id": 12345,
"repository": "shawn-storie/HookHaven",
"verified": true
}GET /api/webhooks/:id/payload
Returns the raw JSON payload for analysis and debugging.
Raw JSON object as received from GitHub.
DELETE /api/webhooks/:id
Removes a webhook event from the database.
{
"success": true,
"message": "Webhook deleted successfully"
}GET /api/parsed-prompts
Returns all parsed prompts with optional filtering.
webhook_id(optional) - Filter by webhook IDrepository(optional) - Filter by repositoryevent_type(optional) - Filter by event type
[
{
"id": 11,
"webhook_id": 21,
"repository": "zpaper-com/patient-sprkz",
"event_type": "issues",
"prompt_template": "# Issues Event Prompt\n\nAnalyze...",
"parsed_content": "# Issues Event Prompt\n\n## Repository: zpaper-com/patient-sprkz...",
"created_at": "2025-07-17T03:34:45"
}
]GET /api/parsed-prompts/:id
Returns detailed information for a specific parsed prompt including webhook data.
{
"id": 11,
"webhook_id": 21,
"repository": "zpaper-com/patient-sprkz",
"event_type": "issues",
"prompt_template": "...",
"parsed_content": "...",
"created_at": "2025-07-17T03:34:45",
"webhook_timestamp": "2025-07-17T03:34:45",
"delivery_id": "fb413598-62be-11f0-8ec7-1c53d2a7ab15",
"sender_login": "shawn-storie",
"payload": "{...}"
}GET /api/claude-responses/:promptId
Returns the Claude AI response for a specific prompt.
promptId(required) - Parsed prompt ID
{
"id": 6,
"prompt_id": 11,
"response_content": "Based on the GitHub issue event analysis:\n\n## Issue Analysis...",
"execution_time": 88647,
"exit_code": 0,
"error_message": null,
"created_at": "2025-07-17T03:36:14"
}POST /api/claude-execute/:id
Manually triggers Claude analysis for a parsed prompt.
id(required) - Parsed prompt ID
None required.
{
"success": true,
"output": "## Actions Taken\n\n**✅ Issue Verified...",
"execution_time": 65432,
"repository": "zpaper-com/patient-sprkz",
"event_type": "issues",
"prompt_id": 11,
"webhook_id": 21
}{
"error": "Claude execution failed",
"exit_code": 1,
"stderr": "Error message...",
"execution_time": 1234
}GET /api/prompts
Returns all available prompt templates organized by type.
{
"generic": {
"issues": "# Issues Event Prompt\n\nAnalyze...",
"pull_request": "# Pull Request Event Prompt\n\nAnalyze...",
"push": "# Push Event Prompt\n\nAnalyze..."
},
"repos": {
"shawn-storie/HookHaven": {
"issues": "# Custom HookHaven Issues Prompt..."
},
"zpaper-com/patient-sprkz": {
"issues": "# Custom Patient-SPRKZ Issues Prompt..."
}
}
}GET /api/prompts/generic/:eventType
Returns a specific generic prompt template.
eventType(required) - Event type (issues, pull_request, push, etc.)
Raw markdown template content.
POST /api/prompts/generic/:eventType
Saves or updates a generic prompt template.
Content-Type: text/plain
Raw markdown template content.
GET /api/prompts/repo/:repo/:eventType
Returns a repository-specific prompt template.
repo(required) - Repository name (URL encoded)eventType(required) - Event type
POST /api/prompts/repo/:repo/:eventType
Saves or updates a repository-specific prompt template.
# Save custom issues prompt for patient-sprkz
curl -X POST "https://hls.clidecoder.com/api/prompts/repo/zpaper-com%2Fpatient-sprkz/issues" \
-H "Content-Type: text/plain" \
-d "# Custom Patient-SPRKZ Issues Prompt..."DELETE /api/prompts/generic/:eventType
DELETE /api/prompts/repo/:repo/:eventType
Removes a prompt template.
GET /api/repositories
Returns available repositories from GitHub CLI.
[
"shawn-storie/HookHaven",
"zpaper-com/patient-sprkz",
"zpaper-com/agents"
]GET /health
Returns service health status and uptime.
{
"status": "ok",
"timestamp": "2025-07-17T03:00:00.000Z",
"uptime": 123.456
}GET /
Returns the main webhook monitoring interface.
GET /events
Returns comprehensive GitHub events reference page.
GET /prompts
Returns Monaco editor interface for prompt template management.
All webhook endpoints validate GitHub signatures using HMAC-SHA256:
# Example webhook call with signature
curl -X POST https://hls.clidecoder.com/webhook \
-H "X-GitHub-Event: issues" \
-H "X-GitHub-Delivery: unique-delivery-id" \
-H "X-Hub-Signature-256: sha256=signature" \
-H "Content-Type: application/json" \
-d '{"action":"opened","issue":{...}}'- No explicit rate limiting currently implemented
- GitHub webhook rate limits apply (5000 requests/hour per repository)
# Get recent webhooks
curl -s https://hls.clidecoder.com/api/webhooks | jq '.[0:5]'
# Check for specific repository activity
curl -s "https://hls.clidecoder.com/api/webhooks?repository=zpaper-com/patient-sprkz" | jq 'length'
# Get Claude analysis results
curl -s https://hls.clidecoder.com/api/parsed-prompts | jq '.[] | {id, repository, event_type, created_at}'# Get latest parsed prompt
PROMPT_ID=$(curl -s https://hls.clidecoder.com/api/parsed-prompts | jq -r '.[0].id')
# Execute Claude analysis
curl -X POST https://hls.clidecoder.com/api/claude-execute/$PROMPT_ID# Download current issues template
curl https://hls.clidecoder.com/api/prompts/generic/issues > issues_template.md
# Upload modified template
curl -X POST https://hls.clidecoder.com/api/prompts/generic/issues \
-H "Content-Type: text/plain" \
--data-binary @issues_template.mdAll API endpoints return appropriate HTTP status codes:
- 200 OK - Successful operation
- 201 Created - Resource created successfully
- 400 Bad Request - Invalid request parameters
- 404 Not Found - Resource not found
- 500 Internal Server Error - Server error
Error responses include descriptive messages:
{
"error": "Parsed prompt not found",
"code": 404
}This API documentation covers all available endpoints in the Hook Line Sinker service as of the latest deployment.