Overview
Customer Success teams and technical admins often need to get Hook data into other systems, or query Hook programmatically for reporting, automation, and integrations that go beyond what's available natively. Doing this without an API means manual exports, local filtering of thousands of records, and unreliable workarounds.
The Hook Public API provides programmatic read access to your Hook data. It is authenticated using API tokens and scoped to your organisation.
Full documentation can be found at docs.api.hook.co.
What the API currently covers
The following endpoints are available from the API:
Members: Access member profiles and role assignments
Customers: List and query customer records
Products: Access product data
Signals: Read risk and engagement signals, including the ability to set a primary risk signal on creation
Notes: Notes added on account pages
When to use the API
There are several use cases for accessing Hook data using the API, including:
Pulling Hook data into an external dashboard or reporting tool
Running scheduled exports of customer, signal, or notes data in CSV or JSON format
Powering custom integrations that aren't covered by Hook's native connectors
Add notes created using Hook to your CRM using the notes endpoint
💡 Hook's public API is currently read-only.
Getting Started with the Hook API
Step 1: Generate an API Token
API tokens are generated through the Hook UI. Tokens are scoped to your organisation, ensuring strict data isolation, and include rate limiting and expiry controls.
Go to Profile settings > API Tokens in Hook
Click + Create Token
Give the token a name and set the time period the API token should be valid for (default value is 30 days). Note: the token will expire after this time period, and any future API requests will not be valid.
Click Create token
Copy your API token (it will not appear after exiting this screen)
Creating a new API token in Profile settings
Step 2: Make your First Request
Use the token copied in Step 1 to authenticate requests against the Hook API endpoints.
Full documentation can be found at docs.api.hook.co.
Example Use Case: Exporting Automation Logs
Use the Automations endpoints to pull a full history of an automation's activity for reporting, auditing, or record-keeping outside Hook.
Find the automation and its trigger/action IDs.
CallGET /organizations/{organizationId}/automationsto list all automations, orGET /organizations/{organizationId}/automations/{automationId}for a specific one. The response includes the automation'striggersandactions, each with an ID you'll need for the next step.Pull the logs. There are two log types, depending on what you want to see:
Action logs (what the automation did):
GET /organizations/{organizationId}/automations/{automationId}/actions/{actionId}/logs- these are the outputs of the automation e.g. emails, signals, alerts etcTrigger logs (when the automation fired):
GET /organizations/{organizationId}/automations/{automationId}/triggers/{triggerId}/logs- this shows which accounts or users are triggered by the automation
Page through the results. Both endpoints accept
offsetandlimitquery parameters (limit maxes out at 250, default 100) and return atotalCountso you know how many records exist in total. Keep incrementingoffsetuntil you've retrieved everything.Export. Since the API returns JSON, save the combined
itemsfrom each page as a CSV or JSON file to complete your export.
All requests require a bearer token in the header:
Authorization: Bearer <YOUR_TOKEN>
Example request for action logs:
curl -i -X GET \ 'https://api.hook.co/v1/organizations/{organizationId}/automations/{automationId}/actions/{actionId}/logs?offset=0&limit=250' \ -H 'Authorization: Bearer <YOUR_TOKEN_HERE>'
Example Use Case: Building Signal Adoption Reports
There are standardised CSM performance reports in Hook. The guidance below is for creating a fully customisable signal adoption report.
Use the API to build a recurring report showing how your team is engaging with signals in Hook - who owns what, what's being actioned, and what's being dismissed - and feed it into your own BI tool.
1. Pull your team members
GET /organizations/{organizationId}/members
Returns every member with id, firstName, lastName, email and managerId. Use managerId to build your reporting hierarchy so the report can be rolled up by manager as well as by individual.
2. Pull your customer list and account ownership
GET /organizations/{organizationId}/customers
Each customer includes memberRoles (who is assigned as CSM, AM, etc.), plus segment, employeeCount, and per-product arr, renewalDate and engagement.level. This is what lets you attribute signals to the right account owner and slice the report by segment or ARR band.
Supports offset/limit (limit max 250) and status (Active, Churned, Upcoming, Unassigned).
3. Pull signals - the core of the report
GET /organizations/{organizationId}/signals
The status query parameter is what makes this useful for adoption reporting. Call the endpoint once per status and count the results:
status=Detected: signals Echo has surfaced but nobody has reviewed yet (your triage backlog)status=Active: signals accepted and being workedstatus=Cleared: signals resolved, after being activestatus=Dismissed: signals rejected, optionally with adismissalReason
Each signal also returns ownerId, createdById, createdDate, raisedDate, closedDate, updatedDate, severity, source, category, type and outcome: enough to calculate per-person volumes, time-to-close, and accept vs dismiss rates over any time window you choose.
Use scope (mine, team, all) if you want the report restricted to a particular team's accounts.
4. Page through and store the results
All list endpoints return totalCount alongside items. Increment offset by your limit until you've retrieved totalCount records, then write the combined results to a CSV, a warehouse table, or a Google Sheet.
5. Schedule it
Run the script on a schedule (daily or weekly) and append each run with a snapshot date. Storing snapshots rather than overwriting is what turns a point-in-time export into a trend report - you can then show week-on-week movement in triage backlog, dismissal rate, and signals cleared per person.
What you can build with signals data
Signal triage funnel: Detected → Active → Cleared/Dismissed, showing where signals stall
Per-CSM scorecard: Signals owned, cleared in last 7/30 days, and average days-to-close, rolled up by manager via
managerIdDismissal analysis: Grouped by
dismissalReasonandcategory, to spot where Echo is generating noise and needs prompt tuningCoverage gaps: Accounts with active high-
severitysignals and no assigned owner inmemberRolesRenewal risk view: Active signals joined to
renewalDateandarr, to surface at-risk revenue in the next 90 days
Any tool that reads CSV or JSON will work: Looker Studio, Power BI, Tableau, or a Google Sheet fed by Apps Script.
The API doesn't currently expose login activity, page views, Hook Chat usage, or action completion data, so those metrics can't be included in a self-built report. For logins activity, use the Usage report in Hook.
If you need a report covering these other data points, speak to your Account Manager.
❓Frequently Asked Questions
Who can use the Hook API?
Anyone with a Hook account can generate a API token.
Are there limits to the data I can access?
Each token is scoped to the permissions of the user who created it. API requests made with a token cannot exceed the access level of that user. For example, if your permissions are Can view: My customers, then the API will only return data for customers you're assigned to. Find out more about permissions here.
Can I generate multiple API tokens for different applications?
Create more than one API token by clicking + Create token in Profile settings > API Tokens, naming each one appropriately.
What is the maximum token lifetime for API tokens?
365 days. Token lifetime can be configured when creating an API token.
What is the rate limit and quota limit?
The rate limit is 100 requests per second. Requests exceeding this rate will receive a 429 Too Many Requests response.
The quota limit is 100,000 requests per day. The quota resets every 24 hours. Once exhausted, further requests will receive a 429 Too Many Requests response until the quota renews.
