Management API

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

FieldTypeDescription
idstringSubscription ID
eventTypeIdstringEvent type ID (evt_...)
eventTypeNamestringHuman-readable event type name
createdAtstringISO 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"]
end
let 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 -> 2
result = mgmt.subscriptions.create(
    "ws_abc",
    "ep_123",
    event_type_ids=["evt_001", "evt_002"],
)

# result["subscribed"] -> 2
result, _ := mgmt.Subscriptions.Create(ctx, "ws_abc", "ep_123", nahook.CreateSubscriptionOptions{
    EventTypeIDs: []string{"evt_001", "evt_002"},
})

// result.Subscribed -> 2
var result = mgmt.subscriptions().create(
    "ws_abc",
    "ep_123",
    new CreateSubscriptionOptions(List.of("evt_001", "evt_002"))
);

// result.getSubscribed() -> 2
var 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"] -> 2
result = mgmt.subscriptions.create(
  "ws_abc",
  "ep_123",
  event_type_ids: ["evt_001", "evt_002"]
)

# result["subscribed"] -> 2
let result = mgmt.subscriptions().create(
    "ws_abc",
    "ep_123",
    CreateSubscriptionOptions {
        event_type_ids: vec!["evt_001".into(), "evt_002".into()],
    },
).await?;

// result.subscribed -> 2

Already-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?;