Management API

Environments

Manage environments and event type visibility across development stages

Environments isolate your webhook infrastructure across development stages. See the Environments guide for concepts and routing behavior.

Environments

List environments

curl https://api.nahook.com/management/v1/workspaces/ws_abc/environments \
  -H "Authorization: Bearer nhm_YOUR_TOKEN"
const { data } = await mgmt.environments.list("ws_abc");
for (const env of data) {
    console.log(env.name, env.slug, env.isDefault);
}
result = mgmt.environments.list("ws_abc")
for env in result["data"]:
    print(env["name"], env["slug"], env["isDefault"])
result, _ := mgmt.Environments.List(ctx, "ws_abc")
for _, env := range result.Data {
    fmt.Println(env.Name, env.Slug, env.IsDefault)
}
var result = mgmt.environments().list("ws_abc");
for (var env : result.getData()) {
    System.out.println(env.getName() + " " + env.getSlug() + " " + env.isDefault());
}
var result = await mgmt.Environments.ListAsync("ws_abc");
foreach (var env in result.Data)
{
    Console.WriteLine($"{env.Name} {env.Slug} {env.IsDefault}");
}
$result = $mgmt->environments->list("ws_abc");
foreach ($result["data"] as $env) {
    echo $env["name"] . " " . $env["slug"] . " " . $env["isDefault"] . "\n";
}
result = mgmt.environments.list("ws_abc")
result["data"].each do |env|
    puts "#{env["name"]} #{env["slug"]} #{env["isDefault"]}"
end
let result = mgmt.environments().list("ws_abc").await?;
for env in result.data {
    println!("{} {} {}", env.name, env.slug, env.is_default);
}

Create an environment

curl -X POST https://api.nahook.com/management/v1/workspaces/ws_abc/environments \
  -H "Authorization: Bearer nhm_YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"name": "Staging", "slug": "staging"}'
const env = await mgmt.environments.create("ws_abc", { name: "Staging", slug: "staging" });
// env.id -> "env_...", env.isDefault -> false
env = mgmt.environments.create("ws_abc", name="Staging", slug="staging")
# env["id"] -> "env_..."
env, _ := mgmt.Environments.Create(ctx, "ws_abc", nahook.CreateEnvironmentOptions{
    Name: "Staging",
    Slug: "staging",
})
var env = mgmt.environments().create("ws_abc", new CreateEnvironmentOptions("Staging", "staging"));
var env = await mgmt.Environments.CreateAsync("ws_abc", new CreateEnvironmentOptions
{
    Name = "Staging",
    Slug = "staging"
});
$env = $mgmt->environments->create("ws_abc", ["name" => "Staging", "slug" => "staging"]);
env = mgmt.environments.create("ws_abc", name: "Staging", slug: "staging")
let env = mgmt.environments()
    .create("ws_abc", CreateEnvironmentOptions {
        name: "Staging".into(),
        slug: "staging".into(),
    })
    .await?;

Get an environment

curl https://api.nahook.com/management/v1/workspaces/ws_abc/environments/env_123 \
  -H "Authorization: Bearer nhm_YOUR_TOKEN"
const env = await mgmt.environments.get("ws_abc", "env_123");
env = mgmt.environments.get("ws_abc", "env_123")
env, _ := mgmt.Environments.Get(ctx, "ws_abc", "env_123")
var env = mgmt.environments().get("ws_abc", "env_123");
var env = await mgmt.Environments.GetAsync("ws_abc", "env_123");
$env = $mgmt->environments->get("ws_abc", "env_123");
env = mgmt.environments.get("ws_abc", "env_123")
let env = mgmt.environments().get("ws_abc", "env_123").await?;

Update an environment

Only the name can be changed — slugs are immutable after creation.
curl -X PATCH https://api.nahook.com/management/v1/workspaces/ws_abc/environments/env_123 \
  -H "Authorization: Bearer nhm_YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"name": "Pre-production"}'
const updated = await mgmt.environments.update("ws_abc", "env_123", { name: "Pre-production" });
updated = mgmt.environments.update("ws_abc", "env_123", name="Pre-production")
name := "Pre-production"
updated, _ := mgmt.Environments.Update(ctx, "ws_abc", "env_123", nahook.UpdateEnvironmentOptions{
    Name: &name,
})
var updated = mgmt.environments().update("ws_abc", "env_123",
    UpdateEnvironmentOptions.withName("Pre-production"));
var updated = await mgmt.Environments.UpdateAsync("ws_abc", "env_123", new UpdateEnvironmentOptions
{
    Name = "Pre-production"
});
$updated = $mgmt->environments->update("ws_abc", "env_123", ["name" => "Pre-production"]);
updated = mgmt.environments.update("ws_abc", "env_123", name: "Pre-production")
let updated = mgmt.environments()
    .update("ws_abc", "env_123", UpdateEnvironmentOptions {
        name: Some("Pre-production".into()),
    })
    .await?;

Delete an environment

Deleting an environment removes all API keys and endpoints scoped to it. The default environment cannot be deleted.
curl -X DELETE https://api.nahook.com/management/v1/workspaces/ws_abc/environments/env_123 \
  -H "Authorization: Bearer nhm_YOUR_TOKEN"
await mgmt.environments.delete("ws_abc", "env_123");
mgmt.environments.delete("ws_abc", "env_123")
_ = mgmt.Environments.Delete(ctx, "ws_abc", "env_123")
mgmt.environments().delete("ws_abc", "env_123");
await mgmt.Environments.DeleteAsync("ws_abc", "env_123");
$mgmt->environments->delete("ws_abc", "env_123");
mgmt.environments.delete("ws_abc", "env_123")
mgmt.environments().delete("ws_abc", "env_123").await?;

Event Type Visibility

Event types are workspace-wide, but their visibility is controlled per environment. An event type must be published in an environment for fan-out delivery to work there.

List visibility

curl https://api.nahook.com/management/v1/workspaces/ws_abc/environments/env_123/event-types \
  -H "Authorization: Bearer nhm_YOUR_TOKEN"
const { data } = await mgmt.environments.listEventTypeVisibility("ws_abc", "env_123");
for (const v of data) {
    console.log(v.eventTypeName, v.published);
}
result = mgmt.environments.list_event_type_visibility("ws_abc", "env_123")
for v in result["data"]:
    print(v["eventTypeName"], v["published"])
result, _ := mgmt.Environments.ListEventTypeVisibility(ctx, "ws_abc", "env_123")
for _, v := range result.Data {
    fmt.Println(v.EventTypeName, v.Published)
}
var result = mgmt.environments().listEventTypeVisibility("ws_abc", "env_123");
for (var v : result.getData()) {
    System.out.println(v.getEventTypeName() + " " + v.isPublished());
}
var result = await mgmt.Environments.ListEventTypeVisibilityAsync("ws_abc", "env_123");
foreach (var v in result.Data)
{
    Console.WriteLine($"{v.EventTypeName} {v.Published}");
}
$result = $mgmt->environments->listEventTypeVisibility("ws_abc", "env_123");
foreach ($result["data"] as $v) {
    echo $v["eventTypeName"] . " " . ($v["published"] ? "true" : "false") . "\n";
}
result = mgmt.environments.list_event_type_visibility("ws_abc", "env_123")
result["data"].each do |v|
    puts "#{v["eventTypeName"]} #{v["published"]}"
end
let result = mgmt.environments()
    .list_event_type_visibility("ws_abc", "env_123")
    .await?;
for v in result.data {
    println!("{} {}", v.event_type_name, v.published);
}

Publish or unpublish an event type

curl -X PUT https://api.nahook.com/management/v1/workspaces/ws_abc/environments/env_123/event-types/evt_456/visibility \
  -H "Authorization: Bearer nhm_YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"published": true}'
const vis = await mgmt.environments.setEventTypeVisibility(
    "ws_abc", "env_123", "evt_456", { published: true }
);
// vis.eventTypeName -> "order.created", vis.published -> true
vis = mgmt.environments.set_event_type_visibility(
    "ws_abc", "env_123", "evt_456", published=True
)
vis, _ := mgmt.Environments.SetEventTypeVisibility(ctx, "ws_abc", "env_123", "evt_456",
    nahook.SetVisibilityOptions{Published: true})
var vis = mgmt.environments().setEventTypeVisibility(
    "ws_abc", "env_123", "evt_456", new SetVisibilityOptions(true));
var vis = await mgmt.Environments.SetEventTypeVisibilityAsync(
    "ws_abc", "env_123", "evt_456", new SetVisibilityOptions { Published = true });
$vis = $mgmt->environments->setEventTypeVisibility(
    "ws_abc", "env_123", "evt_456", ["published" => true]
);
vis = mgmt.environments.set_event_type_visibility(
    "ws_abc", "env_123", "evt_456", published: true
)
let vis = mgmt.environments()
    .set_event_type_visibility("ws_abc", "env_123", "evt_456",
        SetVisibilityOptions { published: true })
    .await?;