Halo Works

Smart reporting

Our open API and ready-made integrations fit into the stack you already have. Thousands of customers already trust us, and we work hard to keep it that way.

7 min read Updated Jan 14, 2026 v3.2.1

Overview

Plan projects, track progress and share updates without another status meeting. Onboarding guides and live chat help new colleagues get going on day one. Teams report saving around five hours a week after the first month.

Installation

Install the SDK with the package manager your project already uses. It needs Node 18 or newer.

terminal
$ npm install @halo-works/sdk
terminal
$ yarn add @halo-works/sdk
terminal
$ pnpm add @halo-works/sdk
Using a server without Node? The same endpoints are available over plain HTTPS; see the API reference below.

Configuration

We measure success by how many customers come back and tell their friends. Automations take care of the repetitive steps, so people can focus on real work. Create a file named halo-works.config.json in the project root:

halo-works.config.json
{
  "project": "halo-works",
  "region": "us-east",
  "categories": ["product", "engineering", "marketing"],
  "retries": 2,
  "timeoutMs": 10000,
  "webhooks": { "enabled": true }
}
OptionTypeDefaultDescription
projectstring-Your project key from the dashboard.
regionstring"us-east"Data centre closest to your customers.
retriesnumber3How often a failed call is retried.
timeoutMsnumber10000Time before a request is cancelled.
webhooks.enabledbooleanfalseSend events to your endpoint.

Your first request

Real-time dashboards show what is on track and what needs attention.

  1. Create an API keyOpen the dashboard, choose Settings › API keys and copy a new secret key.
  2. Store it safelyKeep the key in an environment variable, never in your source code.
  3. Make the callRun the snippet below; it prints the first page of results.
index.js
import { Client } from "@halo-works/sdk";

const client = new Client({ apiKey: process.env.API_KEY });

// list the newest plans in one category
const page = await client.plans.list({ category: "product", limit: 20 });

for (const item of page.data) {
  console.log(item.name, item.price);
}
Heads up: test keys only return sample data. Switch to a live key before you go to production.

API reference

Every endpoint returns JSON and uses standard HTTP status codes.

GET/v1/plansList plans with paging and filters.
POST/v1/plansCreate a new plan.
PATCH/v1/plans/{id}Update some fields of a plan.
DELETE/v1/plans/{id}Archive a plan; it can be restored for 30 days.
response.json
{
  "data": [
    { "id": "plan_8003", "name": "Automation pack", "price": 149 }
  ],
  "has_more": true
}

Troubleshooting

Our team has done this many times, so you never have to guess. We listen first, then build a plan around what you actually need.

Every detail is handled by people who care about getting it right. Start free, upgrade when you grow and cancel any time with one click.

We keep things simple, so you can focus on what matters to you. Clear prices, honest advice and no surprises along the way.

Next steps

Friendly people answer your questions quickly, by phone, chat or email.

Was this page helpful?
All screens