API Documentation
Integrate GetSignalHooks into your workflow. All authenticated endpoints accept a Bearer token via the Authorization header.
Trust surface
Evidence-first outputs
Hooks return source-backed context instead of ungrounded personalization filler, so teams can see why a line was generated before using it.
Trust surface
Built for workflow handoff
The API matches the product flow: generate hooks, save leads, assign sequences, then review queued drafts in Inbox.
Trust surface
Safe to test incrementally
Start with a single endpoint and a single API key. Free and Pro limits make it easy to verify value before rolling into production.
Quickstart flow
Map the API to the actual product workflow
If you are evaluating whether the API matches the app, this is the shortest path to proving it in a real outbound loop.
- 1.Generate hooks from a company URL or company name.
- 2.Save the best contacts into Leads.
- 3.Assign a sequence if the lead should move into follow-up.
- 4.Approve or reject queued drafts in Inbox before send.
Authentication
You can authenticate using either your master bearer token (set in your environment) or a self-serve API key (prefixed with gsh_).
curl -H "Authorization: Bearer YOUR_TOKEN" \
https://app.getsignalhooks.com/api/leads
# Using API key
curl -H "Authorization: Bearer gsh_your_api_key" \
https://app.getsignalhooks.com/api/leads
Endpoints
/api/leadsAuth requiredCreate leads in batch. Duplicates by email are silently skipped.
Request Body
{
"leads": [
{
"email": "jane@acme.com",
"name": "Jane Doe",
"title": "VP Sales",
"company_name": "Acme Inc",
"company_website": "https://acme.com",
"source": "apollo"
}
]
}Response
{ "created": 1, "leads": [{ "id": "...", "email": "jane@acme.com", ... }] }/api/leadsAuth requiredList leads. Optional query params: status (cold|in_conversation|won|lost|unreachable), limit (max 500).
Response
{ "leads": [{ "id": "...", "email": "...", "status": "cold", ... }] }/api/generate-hooksGenerate signal-backed opening lines from a company URL or name. Returns results with confidence scores and evidence tiers.
Request Body
{
"url": "https://acme.com",
"company_name": "Acme Inc"
}Response
{
"hooks": [
{
"text": "...",
"angle": "trigger",
"confidence": "high",
"evidence_tier": "A",
"source_snippet": "..."
}
]
}/api/generate-hooks-batchBatch hook generation for multiple URLs (up to 75 for Pro tier).
Request Body
{ "urls": ["https://acme.com", "https://example.com"] }Response
{ "results": [{ "url": "...", "hooks": [...] }] }/api/generate-followupAuth requiredGenerate a follow-up email for a lead at a given sequence step. Uses angle rotation to avoid repeating hooks.
Request Body
{
"lead_id": "uuid-here",
"step": 1,
"mode": "send",
"avoid_angle": "trigger"
}Response
{
"email": { "subject": "...", "body": "..." },
"meta": { "angle": "risk", "confidence": "high" }
}/api/followup/dueAuth requiredCheck which leads are due for follow-up. Used by the n8n Follow-Up Engine workflow.
Response
{
"leads": [
{
"lead_id": "...",
"email_to": "...",
"followup_step": 1,
"mode": "send"
}
]
}/api/n8n-templatesAuth requiredList available n8n workflow templates. Add ?id=<template-id> to get the full workflow JSON for import.
Response
{
"templates": [
{
"id": "followup-core",
"name": "Follow-Up Engine Core",
"category": "automation",
"requiredCredentials": ["GSH_AUTH", "GMAIL_CRED"]
}
]
}/api/api-keysAuth requiredCreate a new API key. The full key is only shown once in the response. Requires the master bearer token.
Request Body
{
"name": "My Integration",
"scopes": ["leads", "hooks", "followups"],
"expires_at": "2026-12-31T00:00:00Z"
}Response
{
"id": "...",
"name": "My Integration",
"key": "gsh_abc123...",
"key_prefix": "gsh_abc12345",
"scopes": ["leads", "hooks", "followups"]
}Rate Limits
| Tier | Hooks / month | Batch size | Follow-Up Engine |
|---|---|---|---|
| Free ($0) | 10 | 3 URLs | - |
| Pro ($79) | 750 | 75 URLs | Included |