diff --git a/ZB.MOM.WW.Telemetry/src/ZB.MOM.WW.Telemetry/ZbMetricsEndpointExtensions.cs b/ZB.MOM.WW.Telemetry/src/ZB.MOM.WW.Telemetry/ZbMetricsEndpointExtensions.cs
new file mode 100644
index 0000000..ee1f88b
--- /dev/null
+++ b/ZB.MOM.WW.Telemetry/src/ZB.MOM.WW.Telemetry/ZbMetricsEndpointExtensions.cs
@@ -0,0 +1,22 @@
+using Microsoft.AspNetCore.Builder;
+using Microsoft.AspNetCore.Routing;
+
+namespace ZB.MOM.WW.Telemetry;
+
+///
+/// Endpoint extension for mounting the Prometheus /metrics scrape endpoint.
+///
+public static class ZbMetricsEndpointExtensions
+{
+ ///
+ /// Mounts the Prometheus /metrics endpoint. Only valid when
+ /// = .
+ /// Call after app.UseRouting().
+ ///
+ /// The endpoint route builder.
+ public static IEndpointConventionBuilder MapZbMetrics(this IEndpointRouteBuilder endpoints)
+ {
+ ArgumentNullException.ThrowIfNull(endpoints);
+ return endpoints.MapPrometheusScrapingEndpoint();
+ }
+}
diff --git a/ZB.MOM.WW.Telemetry/tests/ZB.MOM.WW.Telemetry.Tests/MapZbMetricsTests.cs b/ZB.MOM.WW.Telemetry/tests/ZB.MOM.WW.Telemetry.Tests/MapZbMetricsTests.cs
new file mode 100644
index 0000000..e6243fb
--- /dev/null
+++ b/ZB.MOM.WW.Telemetry/tests/ZB.MOM.WW.Telemetry.Tests/MapZbMetricsTests.cs
@@ -0,0 +1,38 @@
+using Microsoft.AspNetCore.Builder;
+using Microsoft.AspNetCore.Hosting;
+using Microsoft.Extensions.Hosting;
+using ZB.MOM.WW.Telemetry;
+
+namespace ZB.MOM.WW.Telemetry.Tests;
+
+public sealed class MapZbMetricsTests
+{
+ [Fact]
+ public async Task MapZbMetrics_ServesPrometheusEndpoint()
+ {
+ var builder = WebApplication.CreateBuilder();
+ builder.WebHost.UseUrls("http://127.0.0.1:0");
+ builder.AddZbTelemetry(o =>
+ {
+ o.ServiceName = "t";
+ o.Exporter = ZbExporter.Prometheus;
+ o.Meters = ["Test.Meter"];
+ });
+
+ await using var app = builder.Build();
+ app.MapZbMetrics();
+
+ await app.StartAsync();
+
+ var address = app.Urls.First();
+ using var client = new HttpClient { BaseAddress = new Uri(address) };
+
+ var response = await client.GetAsync("/metrics");
+
+ Assert.Equal(System.Net.HttpStatusCode.OK, response.StatusCode);
+ Assert.NotNull(response.Content.Headers.ContentType);
+ Assert.Equal("text/plain", response.Content.Headers.ContentType!.MediaType);
+
+ await app.StopAsync();
+ }
+}