8 languages.
Same API. Idiomatic everywhere.
First-class clients for Node, Python, Go, Java, .NET, PHP, Ruby, and Rust.
Two methods — send and trigger — that mean the same thing in every language.
Open source, MIT licensed.
# Node.js — same shape in 7 other languages
$ npm install @nahook/client See install commands for Python, Go, Java, .NET, PHP, Ruby, Rust →
Your language. Your framework.
First-class SDKs for 8 languages. Copy, paste, ship.
import { NahookClient } from "@nahook/client";
const nahook = new NahookClient("nhk_us_...");
// Send directly to an endpoint
const send = await nahook.send("ep_abc123", {
payload: { orderId: "ord_123", status: "paid" },
});
// { deliveryId: __TOK5__, status: __TOK6__ }
// Fan-out to all subscribers of an event type
const fan = await nahook.trigger("order.paid", {
payload: { orderId: "ord_123" },
});
// { deliveryIds: [__TOK9__, __TOK10__], status: __TOK11__ }Install, in one line.
Each SDK is a tagged release published to your language's primary registry. No private feeds, no auth tokens just to pull the package.
Node.js
.tsnpm
npm install @nahook/client + Management API package
npm install @nahook/management Java
.javaMaven
<dependency>...nahook-java</dependency> Show full snippet
<dependency>
<groupId>com.nahook</groupId>
<artifactId>nahook-java</artifactId>
<version>latest</version>
</dependency> Feature parity at a glance
Every SDK ships the same surface — verified against the source in public-sdks/ on every release.
| SDK | Package | Returns | Auto-retry | Idempotency | Batch | Version |
|---|---|---|---|---|---|---|
| Node.js | @nahook/client | Promise | ✓ | ✓ | ✓ | 0.2.2 |
| Python | nahook | value | ✓ | ✓ | ✓ | 0.1.4 |
| Go | github.com/getnahook/nahook-go | value | ✓ | ✓ | ✓ | 0.2.1 |
| Java | nahook-java | value | ✓ | ✓ | ✓ | 0.1.2 |
| .NET | Nahook | Task | ✓ | ✓ | ✓ | 0.2.0 |
| PHP | nahook/nahook-php | value | ✓ | ✓ | ✓ | 0.1.0 |
| Ruby | nahook | value | ✓ | ✓ | ✓ | 0.2.0 |
| Rust | nahook | Future | ✓ | ✓ | ✓ | 0.1.2 |
✓ supported · — not yet shipped
Same shape. Every language.
Two operations cover the whole product surface. Send targets one endpoint; trigger fans out to every endpoint subscribed to an event type. The signature is identical across languages — only the syntax changes.
Auto-retry on send
Network failure? The client retries with exponential backoff before surfacing the error. Configurable per call.
Idempotency keys
Pass idempotency_key and the server dedupes
for 15 minutes. Safe to retry from your own code without double-firing webhooks.
Batch endpoints
sendBatch and triggerBatch accept arrays of up to 20 items per call —
one round-trip, one response.
Region-aware
The API key is region-scoped. The client picks the right ingestion edge automatically. US is live today; EU and AP coming soon.
Typed responses
Every method returns a typed delivery handle — id, status, accepted-at timestamp — so the caller can correlate against dashboard analytics or downstream logs.
MIT-licensed
Every SDK is open source on GitHub. Read the code, fork it, vendor it. No proprietary blob, no closed-source dependency.
Pick a language, ship in minutes.
Free with every Nahook workspace. No registration to read the source.