Subscriptions
Subscribe endpoints to event types for targeted webhook delivery
Subscriptions connect endpoints to event types. When an event is triggered, only endpoints subscribed to that event type receive the webhook. This enables fine-grained routing — each endpoint only gets the events it cares about. See the fan-out routing guide for more detail.
API base path: /management/v1/workspaces/{workspaceId}/endpoints/{endpointId}/subscriptions
Subscriptions are scoped to an endpoint. The endpointId parameter is required for all subscription operations.
Response shape
| Field | Type | Description |
|---|---|---|
id | string | Subscription ID |
eventTypeId | string | Event type ID (evt_...) |
eventTypeName | string | Human-readable event type name |
createdAt | string | ISO 8601 creation timestamp |
List subscriptions
List all event types subscribed to a specific endpoint.
curl https://api.nahook.com/management/v1/workspaces/ws_abc/endpoints/ep_123/subscriptions \
-H "Authorization: Bearer nhm_YOUR_TOKEN"const { data } = await mgmt.subscriptions.list("ws_abc", "ep_123");
for (const sub of data) {
console.log(sub.eventTypeId);
}result = mgmt.subscriptions.list("ws_abc", "ep_123")
for sub in result["data"]:
print(sub["eventTypeName"])result, _ := mgmt.Subscriptions.List(ctx, "ws_abc", "ep_123")
for _, sub := range result.Data {
fmt.Println(sub.EventTypeName)
}var result = mgmt.subscriptions().list("ws_abc", "ep_123");
for (var sub : result.getData()) {
System.out.println(sub.getEventTypeName());
}var result = await mgmt.Subscriptions.ListAsync("ws_abc", "ep_123");
foreach (var sub in result.Data)
{
Console.WriteLine(sub.EventTypeName);
}$result = $mgmt->subscriptions->list("ws_abc", "ep_123");
foreach ($result["data"] as $sub) {
echo $sub["eventTypeName"] . "\n";
}result = mgmt.subscriptions.list("ws_abc", "ep_123")
result["data"].each do |sub|
puts sub["eventTypeName"]
endlet result = mgmt.subscriptions().list("ws_abc", "ep_123").await?;
for sub in &result.data {
println!("{}", sub.event_type_name);
}Subscribe to event types
Subscribe an endpoint to one or more event types. The request body takes an array of event type IDs.
curl -X POST https://api.nahook.com/management/v1/workspaces/ws_abc/endpoints/ep_123/subscriptions \
-H "Authorization: Bearer nhm_YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"eventTypeIds": ["evt_001", "evt_002"]}'const result = await mgmt.subscriptions.create("ws_abc", "ep_123", {
eventTypeIds: ["evt_001", "evt_002"],
});
// result.subscribed -> 2result = mgmt.subscriptions.create(
"ws_abc",
"ep_123",
event_type_ids=["evt_001", "evt_002"],
)
# result["subscribed"] -> 2result, _ := mgmt.Subscriptions.Create(ctx, "ws_abc", "ep_123", nahook.CreateSubscriptionOptions{
EventTypeIDs: []string{"evt_001", "evt_002"},
})
// result.Subscribed -> 2var result = mgmt.subscriptions().create(
"ws_abc",
"ep_123",
new CreateSubscriptionOptions(List.of("evt_001", "evt_002"))
);
// result.getSubscribed() -> 2var result = await mgmt.Subscriptions.CreateAsync(
"ws_abc",
"ep_123",
new CreateSubscriptionOptions
{
EventTypeIds = new List<string> { "evt_001", "evt_002" },
}
);
// result.Subscribed -> 2$result = $mgmt->subscriptions->create("ws_abc", "ep_123", ["evt_001", "evt_002"]);
// $result["subscribed"] -> 2result = mgmt.subscriptions.create(
"ws_abc",
"ep_123",
event_type_ids: ["evt_001", "evt_002"]
)
# result["subscribed"] -> 2let result = mgmt.subscriptions().create(
"ws_abc",
"ep_123",
CreateSubscriptionOptions {
event_type_ids: vec!["evt_001".into(), "evt_002".into()],
},
).await?;
// result.subscribed -> 2Already-subscribed event types are silently skipped. The subscribed count reflects only new subscriptions created.
Unsubscribe from an event type
Remove a single event type subscription from an endpoint.
curl -X DELETE https://api.nahook.com/management/v1/workspaces/ws_abc/endpoints/ep_123/subscriptions/evt_001 \
-H "Authorization: Bearer nhm_YOUR_TOKEN"await mgmt.subscriptions.delete("ws_abc", "ep_123", "evt_001");mgmt.subscriptions.delete("ws_abc", "ep_123", "evt_001")mgmt.Subscriptions.Delete(ctx, "ws_abc", "ep_123", "evt_001")mgmt.subscriptions().delete("ws_abc", "ep_123", "evt_001");await mgmt.Subscriptions.DeleteAsync("ws_abc", "ep_123", "evt_001");$mgmt->subscriptions->delete("ws_abc", "ep_123", "evt_001");mgmt.subscriptions.delete("ws_abc", "ep_123", "evt_001")mgmt.subscriptions().delete("ws_abc", "ep_123", "evt_001").await?;